• 四则运算03


    一.设计思想

    (1)总共创建3个类,主类YunSuan,其他Operation(包含四则运算的方法)、From(包含获得随机数的方法)和Result(属性有必须的一个,方法是为了使主函数减少代码量而写的)三个类。

    1.1 num输入出题数量

    1.2 min,max进行运算的最低和最高数值范围

    1.3(0)无乘除法  (1)只有乘法  (2)只有除法(无余数)  (3)只有除法(有余数)  (4)混合运算

    (2)四则运算主要实现方法放在Operation类中。

    2.1 String addition(int min,int max,Result r)//加法

    2.2String subtraction(int min,int max,Result r)//减法无负数

    2.3String multiplication(int min,int max,Result r)//乘法

    2.4String division(int min,int max,Result r)//除法无余数

    2.5String division1(int min,int max,Result r)//除法有余数

    2.6 String mixop(int min,int max,Result r)//混合运算

    (3)Operation类中的方法调用From类中的方法,产生随机数进行运算,Operation类中的方法参数的数据类型包含Result类型,以便结果的使用。

    2.源代码

    1、四则运算主要实现方法放在Operation类中。

    import java.util.*;
    import java.lang.reflect.Array;
    import java.util.Arrays;
    import java.util.Random;
    import java.util.Scanner;
    
    
    public class YunSuan {
    
        void result()
        {
            Scanner sca=new Scanner(System.in);
            Operation op=new Operation();
            Result r=new Result();
            //确定出题数量
            System.out.println("输入出题数量 ");
            int num=sca.nextInt();
            r.init(num);
            //确定数值范围
            System.out.println("输入进行运算的最低和最高数值范围:");
            int min,max;
            min=sca.nextInt();
            max=sca.nextInt();
            //确定是否有乘除法
            int select;
            System.out.println("请按要求输入  (0)无乘除法  (1)有乘法  (2)有除法(无余数)  (3)有除法(有余数)  (4)混合运算");
            select=sca.nextInt();
            if(select==0)
            {
                r.first(min, max, num, r);
                System.out.println("总共算对 "+r.right+" 道题");
            }
            else if(select==1)
            {
                r.first(min, max, 2*(num/3), r);
                r.second(min, max, num, r);
                System.out.println("总共算对 "+r.right+" 道题");
            }
            else if(select==2)
            {
                r.first(min, max, 2*(num/3), r);
                r.third(min, max, num, r);
                System.out.println("总共算对 "+r.right+" 道题");
            }
            else if(select==3)
            {
                r.first(min, max, 2*(num/3), r);
                r.third1(min, max, num, r);
                System.out.println("总共算对 "+r.right+" 道题");
            }
            else if(select==4)
            {
                r.fourth(min, max, num, r);
                System.out.println("总共算对 "+r.right+" 道题");
            }
            else
            {
                System.out.println("输入错误");
            }
        }
        public static void main(String[] args){
            try
            {
                YunSuan s=new YunSuan();
                s.result();
            }
            catch(Exception e)
            {
                System.out.println("输入不合法,请重新执行,按照要求输入");
            }
        }
    }
    class Result {
        
        static int right;
        int i,j;
        String r1,a,b,s[];
        Scanner sca=new Scanner(System.in);
        Operation op=new Operation();
        Result()
        {
            right=0;
        }
        void init(int num)//初始化数组
        {
            s=new String[num];
        }
        void first(int min,int max,int num,Result r)
        {
            for(i=0;i<(num/2);i++)//加法
            {
                j=0;
                boolean bool=true;
                s[i]=op.addition(min, max,r);
                //判断是否重复
                while(bool&&(i!=0))
                {
                    while(s[i].equals(s[j]))
                    {
                        s[i]=op.addition(min, max,r);
                        j=0;
                    }
                    j++;
                    if(j==i)
                    {
                        bool=false;
                    }
                }
                a=r.r1;
                System.out.println("("+(i+1)+") "+s[i]);
                b=sca.nextLine();
                if(a.equals(b))
                {
                    right++;
                }
                else
                {
                    System.out.println("第 "+(i+1)+" 道题算错,正确答案为 "+a);
                }
            }
            for(i=(num/2);i<num;i++)//减法
            {
                j=num/2;
                boolean bool=true;
                s[i]=op.subtraction(min, max, r);
                //判断是否重复
                while(bool&&(i!=num/2))
                {
                    while(s[i].equals(s[j]))
                    {
                        s[i]=op.subtraction(min, max,r);
                        j=num/2;
                    }
                    j++;
                    if(j==i)
                    {
                        bool=false;
                    }
                }
                a=r.r1;
                System.out.println("("+(i+1)+") "+s[i]);
                b=sca.nextLine();
                if(a.equals(b))
                {
                    right++;
                }
                else
                {
                    System.out.println("第 "+(i+1)+" 道题算错,正确答案为 "+a);
                }
            }
        }
        void second(int min,int max,int num,Result r)
        {
            for(i=2*(num/3);i<num;i++)//乘法
            {
                j=2*(num/3);
                boolean bool=true;
                s[i]=op.multiplication(min, max, r);
                //判断是否重复
                while(bool&&(i!=2*(num/3)))
                {
                    while(s[i].equals(s[j]))
                    {
                        s[i]=op.multiplication(min, max, r);
                        j=2*num/3;
                    }
                    j++;
                    if(j==i)
                    {
                        bool=false;
                    }
                }
                a=r.r1;
                System.out.println("("+(i+1)+") "+s[i]);
                b=sca.nextLine();
                if(a.equals(b))
                {
                    right++;
                }
                else
                {
                    System.out.println("第 "+(i+1)+" 道题算错,正确答案为 "+a);
                }
            }
        }
        void third(int min,int max,int num,Result r)//除法无余数
        {
            for(i=2*(num/3);i<num;i++)//除法
            {
                j=2*(num/3);
                boolean bool=true;
                s[i]=op.division(min, max, r);
                //判断是否重复
                while(bool&&(i!=2*(num/3)))
                {
                    while(s[i].equals(s[j]))
                    {
                        s[i]=op.division(min, max, r);
                        j=2*num/3;
                    }
                    j++;
                    if(j==i)
                    {
                        bool=false;
                    }
                }
                a=r.r1;
                System.out.println("("+(i+1)+") "+s[i]);
                b=sca.nextLine();
                if(a.equals(b))
                {
                    right++;
                }
                else
                {
                    System.out.println("第 "+(i+1)+" 道题算错,正确答案为 "+a);
                }
            }
        }
        void third1(int min,int max,int num,Result r)//除法有余数
        {
            for(i=2*(num/3);i<num;i++)//除法
            {
                j=2*(num/3);
                boolean bool=true;
                s[i]=op.division1(min, max, r);
                //判断是否重复
                while(bool&&(i!=2*(num/3)))
                {
                    while(s[i].equals(s[j]))
                    {
                        s[i]=op.division1(min, max, r);
                        j=2*num/3;
                    }
                    j++;
                    if(j==i)
                    {
                        bool=false;
                    }
                }
                a=r.r1;
                System.out.println("("+(i+1)+") "+s[i]);
                b=sca.nextLine();
                if(a.equals(b))
                {
                    right++;
                }
                else
                {
                    System.out.println("第 "+(i+1)+" 道题算错,正确答案为 "+a);
                }
            }
        }
        
        void fourth(int min,int max,int num,Result r)
        {
            for(i=0;i<num;i++)
            {
                j=0;
                boolean bool=true;
                s[i]=op.mixop(min, max, r);
                //判断是否重复
                while(bool&&(i!=0))
                {
                    while(s[i].equals(s[j]))
                    {
                        s[i]=op.addition(min, max,r);
                        j=0;
                    }
                    j++;
                    if(j==i)
                    {
                        bool=false;
                    }
                }
                a=r.r1;
                System.out.println("("+(i+1)+") "+s[i]);
                b=sca.nextLine();
                if(a.equals(b))
                {
                    right++;
                    
                }
                else
                {
                    System.out.println("第 "+(i+1)+" 道题算错,正确答案为 "+a);
                }
            }
        }
    }
    View Code

     2、 Operation类中的方法调用From类中的方法,产生随机数进行运算,Operation类中的方法参数的数据类型包含Result类型,以便结果的使用。

    class From {
        Random1 ran1=new Random1();
        
        String addition(int min,int max,Result r)//加法
        {
            String str="";
            int a[],c,i,re=0;
            c=ran1.setRandom(2, 4);//加法运算的个数,最少2个,最多4个
            a=new int[c];
            for(i=0;i<c;i++)
            {
                a[i]=ran1.setRandom(min,max);
                if(i<(c-1))
                {
                    str+=a[i]+" + ";
                }
                else
                {
                    str+=a[i]+" =";
                }
                re+=a[i];//结果
            }
            r.r1=""+re;
            return str;
        }
        
        String subtraction(int min,int max,Result r)//减法无负数
        {
            String str="";
            int a[],c,i,re=0;//a[]随机数存放的数组  
            c=ran1.setRandom(2, 4);//减法运算的个数,最少2个,最多4个
            a=new int[c];
            for(i=0;i<c;i++)
            {
                a[i]=ran1.setRandom(min,max);
            }
            Arrays.sort(a);//随机出来的数从小到大排序
            for(i=0;i<c-1;i++)//除最大值外的其他值相加
            {
                re+=a[i];
            }
            while(a[c-1]<re)//当最大值比其他值的和小时,重新随机c个数
            {
                re=0;
                for(i=0;i<c;i++)
                {
                    a[i]=ran1.setRandom(min,max);
                }
                Arrays.sort(a);//随机出来的数从小到大排序
                for(i=0;i<c-1;i++)//除最大值外的其他值相加
                {
                    re+=a[i];
                }
            }
            for(i=c-1;i>=0;i--)
            {
                if(i>0)
                {
                    str+=a[i]+" - ";
                }
                else
                {
                    str+=a[i]+" =";
                }
            }
            r.r1=""+(a[c-1]-re);
            return str;
        }
        
        String multiplication(int min,int max,Result r)//乘法
        {
            String str="";
            int a[],c,i,re=1;
            c=ran1.setRandom(2, 4);//乘法运算的个数,最少2个,最多4个
            a=new int[c];
            for(i=0;i<c;i++)
            {
                a[i]=ran1.setRandom(min,max);
                if(i<(c-1))
                {
                    str+=a[i]+" x ";
                }
                else
                {
                    str+=a[i]+" =";
                }
                re*=a[i];
            }
            r.r1=""+re;
            return str;
        }
        
        String division(int min,int max,Result r)//除法无余数
        {
            String str="";
            int a[],c,i,re=1;
            c=ran1.setRandom(2, 4);//除法运算的个数,最少2个,最多4个
            a=new int[c];
            for(i=0;i<c;i++)
            {
                a[i]=ran1.setRandom(min,max);
            }
            Arrays.sort(a);
            for(i=0;i<c-1;i++)
            {
                re*=a[i];
            }
            while((re==0)||(a[c-1]%re!=0))
            {
                re=1;
                for(i=0;i<c;i++)
                {
                    a[i]=ran1.setRandom(min,max);
                }
                Arrays.sort(a);
                for(i=0;i<c-1;i++)
                {
                    re*=a[i];
                }
            }
            for(i=c-1;i>=0;i--)
            {
                if(i>0)
                {
                    str+=a[i]+" ÷ ";
                }
                else
                {
                    str+=a[i]+" =";
                }
            }
            r.r1=""+(a[c-1]/re);
            return str;
        }
    
        String division1(int min,int max,Result r)//除法有余数
        {
            String str="";
            int a[],c,i,re=1;
            c=ran1.setRandom(2, 4);//除法运算的个数,最少2个,最多4个
            a=new int[c];
            for(i=0;i<c;i++)
            {
                a[i]=ran1.setRandom(min,max);
                if(a[i]==0)
                {
                    a[i]=ran1.setRandom(min,max);
                }
            }
            for(i=1;i<c;i++)
            {
                re*=a[i];
            }
            for(i=0;i<c;i++)
            {
                if(i<(c-1))
                {
                    str+=a[i]+" ÷ ";
                }
                else
                {
                    str+=a[i]+" =";
                }
            }
            int m;//最大公约数
            if(a[0]<re)
            {
                m=a[0];
            }
            else
            {
                m=re;
            }
            for(i=m;i>0;i--)
            {
                if((a[0]%i==0)&&(re%i==0))
                {
                    m=i;
                    break;
                }
            }
            r.r1=(a[0]/m)+"/"+(re/m);
            if((a[0]/m)%(re/m)==0)
            {
                r.r1=""+((a[0]/m)/(re/m));
            }
            return str;
        }
        
        String mixop(int min,int max,Result r)//混合运算
        {
            String str="";
            int a[],c,i,re=0;
            c=ran1.setRandom(4,5);//混合运算的个数,最少4个,最多5个
            a=new int[c];
            int b=ran1.setRandom0(4);
            for(i=0;i<c;i++)
            {
                a[i]=ran1.setRandom(min,max);
            }
            if(c==4&&b==0)
            {
                re=a[0]+a[1]-a[2]*a[3];
                if(re>=0)
                {
                    str+=a[0]+" + "+a[1]+" - "+a[2]+" x "+a[3]+" = ";
                }
                else
                {
                    str+=a[2]+" x "+a[3]+"-"+a[0]+" - "+a[1]+" = ";
                    re=-re;
                }
            }
            if(c==4&&b==1)
            {
                re=a[0]-a[1]+a[2]*a[3];
                if(re>=0)
                {
                    str+=a[0]+" - "+a[1]+" + "+a[2]+" x "+a[3]+" = ";
                }
                else
                {
                    str+=a[1]+" - "+a[0]+" - "+a[2]+" x "+a[3]+" = ";
                    re=-re;
                }
            }
            if(c==4&&b==2)
            {
                while((a[3]==0)||(a[2]%a[3]!=0))
                {
                    a[2]=ran1.setRandom(min,max);
                    a[3]=ran1.setRandom(min,max);
                }
                re=a[0]+a[1]-a[2]/a[3];
                if(re>=0)
                {
                    str+=a[0]+" + "+a[1]+" - "+a[2]+" ÷ "+a[3]+" = ";
                }
                else
                {
                    str+=a[2]+" ÷ "+a[3]+"-"+a[0]+" - "+a[1]+" = ";
                    re=-re;
                }
            }
            if(c==4&&b==3)
            {
                while((a[3]==0)||(a[2]%a[3]!=0))
                {
                    a[2]=ran1.setRandom(min,max);
                    a[3]=ran1.setRandom(min,max);
                }
                re=a[0]-a[1]+a[2]/a[3];
                if(re>=0)
                {
                    str+=a[0]+" - "+a[1]+" + "+a[2]+" ÷ "+a[3]+" = ";
                }
                else
                {
                    str+=a[1]+" - "+a[0]+" - "+a[2]+" ÷ "+a[3]+" = ";
                    re=-re;
                }
            }
            if(c==5)
            {
                while((a[4]==0)||((a[2]*a[3])%a[4]!=0))
                {
                    a[2]=ran1.setRandom(min,max);
                    a[3]=ran1.setRandom(min,max);
                    a[4]=ran1.setRandom(min,max);
                }
                re=a[0]+a[1]-a[2]*a[3]/a[4];
                if(re>=0)
                {
                    str+=a[0]+" + "+a[1]+" - "+a[2]+" x "+a[3]+" ÷ "+a[4]+" = ";
                }
                else
                {
                    str+=a[2]+" x "+a[3]+" ÷ "+a[4]+"-"+a[0]+" - "+a[1]+" = ";
                    re=-re;
                }
            }
            r.r1=""+re;
            return str;
        }
    }
    View Code

    3、

    class Random1 {
        int setRandom(int min,int max){
            Random ran=new Random();
            int r=ran.nextInt(max-min+1)+min;
            return r;
        }
        int setRandom0(int num){
            Random ran=new Random();
            int r=ran.nextInt(num);
            return r;
        }
    }
    View Code

      3、实验截图

    1、

    2、

    4、程序总结分析:有了清晰的需求分析,还要有注释。借鉴了队友的前一个程序的基础上。注释也很重要,特别是写过之后重用和测试代码时,都必须得看。否则就不得不将已写好的封装函数从头到尾再看一遍,再理解,这样很浪费时间。有了注释,就可以省去这些重新理解函数的时间,可以提高效率。

    5、工作照

  • 相关阅读:
    给最小化托盘增加右键菜单
    (转)c#实现开机自启动
    Socket代码
    (转)C# Socket简单例子(服务器与客户端通信)
    (转)C# Socket异步通信
    (转)winform pictureBox后台显示图片
    验证DataGridView单元格的值
    批处理判断是否有.net环境
    Winform判断是否已启动
    linux 下 apache启动、停止、重启命令
  • 原文地址:https://www.cnblogs.com/hanzhu/p/5323382.html
Copyright © 2020-2023  润新知