• 四则运算 2


    与四则运算1相比的较大改进地方:

    1)使用了多层嵌套,完善了定制题目的要求。

    2)由于使用多层嵌套,加减乘除部分代码要多次利用,所以将加减乘除以方法函数进行封装。

    3)利用InputException 进行了错误输入判断

    编程思路:与四则运算一相比,多了嵌套判断条件的使用。

    第一步:用函数封装 判断最大公约数、加减乘除法。

    第二步:输入定制题目的条件:1.是否有乘除法 2.取值范围 3.减法有无负数 4.除法有无余数

    分别从屏幕中读取,用(1.是 2.否)等方法进行条件限制。并利用InputException 判断用户输入是否符合要求。

    第三步:进行嵌套处理,首先判断是否有乘除法、确定取值范围 、减法有无负数,如果有乘除法,判断除法有无余数。

    第四步:利用随机数,随机产生两个数及加减乘除法,调用相应的方法函数,并利用数组F[i]进行答案的存储。

    第五步:输出答案。

    import java.util.Scanner;
    
    import javax.swing.*;
    //输入错误
    
    class InputException extends Exception{
        InputException(String smg){
            super(smg);
        }
    }
    public class SZYS {
        public static void main(String[] args){
            Scanner in=new Scanner(System.in);
            int a[]=new int[30];//第一个数的分子
            int b[]=new int[30];//第一个数的分母
            int c[]=new int[30];//用于判断加减乘除号
            int d[]=new int[30];//第二个数的分子
            int e[]=new int[30];//第二个数的分母
            String f[]=new String[30];//答案
            
            System.out.println("请选择是否有乘除法(1.是  2.否)");
            int x;
            x=in.nextInt();
            //输入错误处理
            try{
                if(x<1||x>2) throw new InputException("输入错误!");
                
            }catch(InputException y){
                System.out.println(y.getMessage());
                System.exit(0);}
            
            
            
            System.out.println("请选择是否有括号(1.是  2.否)");
            int x1;
            x1=in.nextInt();
            //输入错误处理
            try{
                if(x1<1||x1>2) throw new InputException("输入错误!");
                
            }catch(InputException y){
                System.out.println(y.getMessage());
                System.exit(0);}
            
            System.out.println("请选择取值范围的上限(整数)");
            int x2;
            x2=in.nextInt();
            //输入错误处理
            try{
                if(x2<=0) throw new InputException("输入错误!");
                
            }catch(InputException y){
                System.out.println(y.getMessage());
                System.exit(0);}
            
            
            System.out.println("请选择加减法是否有负数(1.是  2.否)");
            int x3;
            x3=in.nextInt();
            //输入错误处理
            try{
                if(x3<1||x3>2) throw new InputException("输入错误!");
                
            }catch(InputException y){
                System.out.println(y.getMessage());
                System.exit(0);}
        
            int x4 = 0;
            if(x==1){
            System.out.println("除法有无余数(1.是  2.否)");
            x4=in.nextInt();
            //输入错误处理
            try{
                if(x4<1||x4>2) throw new InputException("输入错误!");
                
            }catch(InputException y){
                System.out.println(y.getMessage());
                System.exit(0);}
            }in.close();
            //嵌套1:是否有乘除法
            switch(x){
            case 1:{//有乘除法
                for(int i=0;i<30;i++)
                {
                    a[i]=(int)(Math.random()*x2+1);
                    b[i]=(int)(Math.random()*x2+1);//分母不能为0
                    
                    c[i]=(int)(Math.random()*100);
                    
                    d[i]=(int)(Math.random()*x2+1);
                    e[i]=(int)(Math.random()*x2+1);//分母不能为0
                    int n=MaxCommonDivisor(a[i],b[i]);
                    int m=MaxCommonDivisor(d[i],e[i]);
                    //加法运算
                   if(c[i]>=0&&c[i]<25) {
                       if(c[i]%2==0){
                           if(a[i]>b[i]){int t=a[i];a[i]=b[i];b[i]=t;}
                           if(d[i]>e[i]){int t=d[i];d[i]=e[i];e[i]=t;}
                           f[i]=new String(Jiafa(n,m,a[i],b[i],d[i],e[i]));
                       }
                       else{
                           f[i]=new String(Jiafa(1,1,a[i],1,d[i],1));
                       }
                    }
                    //减法运算
                    else if(c[i]>=25&&c[i]<50) {
                        //嵌套3:减法有无负数
                        switch(x3){
                        case 1:{//有负数
                            if(c[i]%2==0){
                                if(a[i]>b[i]){int t=a[i];a[i]=b[i];b[i]=t;}
                                  if(d[i]>e[i]){int t=d[i];d[i]=e[i];e[i]=t;}
                                f[i]=new String(Jianfa(n,m,a[i],b[i],d[i],e[i]));
                            }
                            else{
                                  f[i]=new String(Jianfa(1,1,a[i],1,d[i],1));
                            }
                        break;
                        }
                        case 2:{//无负数
                        if(c[i]%2==0){
                             if(a[i]>b[i]){int t=a[i];a[i]=b[i];b[i]=t;}
                             if(d[i]>e[i]){int t=d[i];d[i]=e[i];e[i]=t;}
                        if(a[i]*e[i]>d[i]*b[i])
                            {f[i]=new String(Jianfa(n,m,a[i],b[i],d[i],e[i]));}
                        if(a[i]*e[i]<=d[i]*b[i])
                            {f[i]=new String(Jianfa(n,m,d[i],e[i],a[i],b[i]));}
                        }
                        else{
                            if(a[i]>=d[i])f[i]=new String(Jianfa(1,1,a[i],1,d[i],1));
                            else f[i]=new String(Jianfa(1,1,d[i],1,a[i],1));
                        }
                        break;
                        }
                        }
                    }
                    //乘法运算
                    else if(c[i]>=50&&c[i]<75)  {
                        if(c[i]%2==0){
                            if(a[i]>b[i]){int t=a[i];a[i]=b[i];b[i]=t;}
                             if(d[i]>e[i]){int t=d[i];d[i]=e[i];e[i]=t;}
                        f[i]=new String(Chengfa(n,m,a[i],b[i],d[i],e[i]));
                        }
                        else{
                            f[i]=new String(Chengfa(1,1,a[i],1,d[i],1));
                        }
                    }
                    //除法运算
                    else if(c[i]>=75&&c[i]<100)   {
                        if(c[i]%2==0){
                             if(a[i]>b[i]){int t=a[i];a[i]=b[i];b[i]=t;}
                             if(d[i]>e[i]){int t=d[i];d[i]=e[i];e[i]=t;}
                        f[i]=new String(Chufa(n,m,a[i],b[i],d[i],e[i]));
                        }
                        else{
                            if(x4==1)//嵌套4:除法有无余数
                            {f[i]=new String(Chufa(a[i],d[i]));}
                            if(x4==2)
                            {int l=(int)(Math.random()*20+1);
                             a[i]=d[i]*l;
                             System.out.println(a[i]+" ÷ "+d[i]+" =");
                             f[i]=l+"";
                            }
                        }
                    }
                    
                }
                System.out.println("答案:");
                for(int i=0;i<30;i++)
                    System.out.println(f[i]);
                break;
            }
             case 2:{//无乘除法
                for(int i=0;i<30;i++)
                {a[i]=(int)(Math.random()*x2+1);
                b[i]=(int)(Math.random()*x2+1);//分母不能为0
                
                c[i]=(int)(Math.random()*100);
                
                d[i]=(int)(Math.random()*x2+1);
                e[i]=(int)(Math.random()*x2+1);//分母不能为0
                int n=MaxCommonDivisor(a[i],b[i]);
                int m=MaxCommonDivisor(d[i],e[i]);
                //加法运算
               if(c[i]>=0&&c[i]<25) {
                   if(c[i]%2==0){
                       if(a[i]>b[i]){int t=a[i];a[i]=b[i];b[i]=t;}
                       if(d[i]>e[i]){int t=d[i];d[i]=e[i];e[i]=t;}
                       f[i]=new String(Jiafa(n,m,a[i],b[i],d[i],e[i]));
                   }
                   else{
                       f[i]=new String(Jiafa(1,1,a[i],1,d[i],1));
                   }
                }
                //减法运算
                else if(c[i]>=25&&c[i]<50) {
                    //嵌套3:减法有无负数
                    switch(x3){
                    case 1:{//有负数
                        if(c[i]%2==0){
                            if(a[i]>b[i]){int t=a[i];a[i]=b[i];b[i]=t;}
                              if(d[i]>e[i]){int t=d[i];d[i]=e[i];e[i]=t;}
                            f[i]=new String(Jianfa(n,m,a[i],b[i],d[i],e[i]));
                        }
                        else{
                              f[i]=new String(Jianfa(1,1,a[i],1,d[i],1));
                        }
                    break;
                    }
                    case 2:{//无负数
                    if(c[i]%2==0){
                         if(a[i]>b[i]){int t=a[i];a[i]=b[i];b[i]=t;}
                         if(d[i]>e[i]){int t=d[i];d[i]=e[i];e[i]=t;}
                    if(a[i]*e[i]>d[i]*b[i])
                        {f[i]=new String(Jianfa(n,m,a[i],b[i],d[i],e[i]));}
                    if(a[i]*e[i]<=d[i]*b[i])
                        {f[i]=new String(Jianfa(n,m,d[i],e[i],a[i],b[i]));}
                    }
                    else{
                        if(a[i]>=d[i])f[i]=new String(Jianfa(1,1,a[i],1,d[i],1));
                        else f[i]=new String(Jianfa(1,1,d[i],1,a[i],1));
                    }
                    break;
                    }
                    }
                }
               }
                System.out.println("答案:");
                for(int i=0;i<30;i++)
                    System.out.println(f[i]);
                
            }
            
        }
            
        }
    
        
          //求两个数的最大公约数
            public static int MaxCommonDivisor(int m,int n){
                if(m<n){int temp=m;m=n;n=temp;}
                while(m%n!=0){
                    int t=m%n;
                    m=n;
                    n=t;
                }
                return n;
            }
          //用函数封装加减乘除法    
            public static String Jiafa(int n,int m,int a,int b,int d,int e){
                String f ="";
                if(n==b&&m==e)
                {System.out.println(a/b+" + "+d/e+" =");f=(a/b)+(d/e)+"";}
                else if(n==b&&m!=e)
                {System.out.println(a/b+" + "+d/m+"/"+e/m+" =");
                f=(a/b)*(e/m)+d/m+"/"+e/m;}
                else if(n!=b&&m==e)
                {System.out.println(a/n+"/"+b/n+" + "+d/e+" =");
                f=a/n+(d/e)*(b/n)+"/"+b/n;}
                else if(n!=b&&m!=e)
                {System.out.println(a/n+"/"+b/n+" + "+d/m+"/"+e/m+" =");
                int k=MaxCommonDivisor(a*e+b*d,b*e);
                if(k==b*e)
                f=(a*e+b*d)/k+"";
                else if(k!=b*e)
                f=(a*e+b*d)/k+"/"+b*e/k;
                }
                return f;
            }
            public static String Jianfa(int n,int m,int a,int b,int d,int e){
                String f = "";
                if(n==b&&m==e)
                {System.out.println(a/b+" - "+d/e+" =");f=(a/b)-(d/e)+"";}
                else if(n==b&&m!=e)
                {System.out.println(a/b+" - "+d/m+"/"+e/m+" =");
                f=(a/b)*(e/m)-d/m+"/"+e/m;}
                else if(n!=b&&m==e)
                {System.out.println(a/n+"/"+b/n+" - "+d/e+" =");
                f=a/n-(d/e)*(b/n)+"/"+b/n;}
                else if(n!=b&&m!=e)
                {System.out.println(a/n+"/"+b/n+" - "+d/m+"/"+e/m+" =");
                int k=MaxCommonDivisor(a*e+b*d,b*e);
                if(k==b*e)
                f=(a*e-b*d)/k+"";
                else if(k!=b*e)
                f=(a*e-b*d)/k+"/"+b*e/k;
                }
                return f;
            }
            public static String Chengfa(int n,int m,int a,int b,int d,int e){
                String f = "";
                if(n==b&&m==e)
                {System.out.println(a/b+" X "+d/e+" =");f=(a/b)*(d/e)+"";}
                else if(n==b&&m!=e)
                {System.out.println(a/b+" X "+d/m+"/"+e/m+" =");
                int k=MaxCommonDivisor(a/n*d,e);
                if(k==e)
                f=a*d/n/e+"";
                else if(k!=e)
                    f=a*d/n/k+"/"+e/k;
                }
                else if(n!=b&&m==e)
                {System.out.println(a/n+"/"+b/n+" X "+d/e+" =");
                int k=MaxCommonDivisor(a*d/m,b);
                if(k==b)
                        f=a*d/m/b+"";
                else if(k!=b)
                        f=a*d/m/k+"/"+b/k;}
                else if(n!=b&&m!=e)
                {System.out.println(a/n+"/"+b/n+" X "+d/m+"/"+e/m+" =");
                int k=MaxCommonDivisor(a*d/m/n,b*e/m/n);
                if(k==b*e/m/n)
                f=a*d/b/e+"";
                else if(k!=b*e/m/n)
                f=a*d/k/m/n+"/"+b*e/k/m/n;
                }
                return f;
            }
            public static String Chufa(int n,int m,int a,int b,int d,int e){
                String f="";
                if(n==b&&m==e)
                {System.out.println(a/b+" ÷ "+d/e+" =");f=(a/b)/(d/e)+"";}
                else if(n==b&&m!=e)
                {System.out.println(a/b+" ÷ "+d/m+"/"+e/m+" =");
                int k=MaxCommonDivisor(a/n*e,d);
                if(k==d)
                f=a*e/n/d+"";
                else if(k!=d)
                    f=a*e/n/k+"/"+d/k;
                }
                else if(n!=b&&m==e)
                {System.out.println(a/n+"/"+b/n+" ÷ "+d/e+" =");
                int k=MaxCommonDivisor(a*m,b*d);
                if(k==b*d)
                    f=a*m/b/d+"";
                    else if(k!=b*d)
                        f=a*m/k+"/"+b*d/k;}
                else if(n!=b&&m!=e)
                {System.out.println(a/n+"/"+b/n+" ÷ "+d/m+"/"+e/m+" =");
                int k=MaxCommonDivisor(a*e,b*d);
                if(k==b*d)
                f=a*e/b/d+"";
                else if(k!=b*d)
                f=a*e/k+"/"+b*d/k;
                }
                return f;
            }
    
            public static String Chufa(int a,int b){
                String f="";
                if(a%b==0){a++;}
                System.out.println(a+" ÷ "+b+" =");
                f=a/b+"......"+a%b;
                return f;
            }
    }

    运行结果截图:

    (除法有余数仅在随机产生的整数除法中出现,真分数除法结果仍可以为分数)

    一些错误bug的处理:

    四则运算2的编程时间表
           日期 开始时间 结束时间 中断时间 净时间 活动 备注
    3/7 19:00 21:00 30分钟 1小时30分钟 主要对源程序进行了改进,将加减乘除用函数封装 完成了基本的框架
    3/8 15:00 16:00 0 1小时 添加了嵌套条件,并对条件进行判断,用try和catch判断输入错误 开始时嵌套用switch,却忘记加入break(和break位置加入错误),致使思路混乱
      18:40 20:40 0 2小时 由于switch大量括号混乱,将整体框架删除重新写入。 switch与if结合,进行嵌套。
    3/10 16:20 17:00 0 40分钟 对代码进行了改进,进一步完善了代码,增加了错误判断 基本完成前四层条件的嵌套
                 
                 

    随机产生括号尚未完成,未完待续……

  • 相关阅读:
    Unity的动态加载简单使用
    枚举的使用总结
    IIS WEB程序如何访问共享目录
    AngularJS之页面跳转Route
    ASP.NET MVC4 BundleConfig的注意事项
    Android自动化测试------monkey自定义脚本(四)
    Android自动化测试------monkey(三)
    Android自动化测试------monkey(二)
    Android自动化测试------monkey(一)
    (一)adb命令的使用
  • 原文地址:https://www.cnblogs.com/xulei11-/p/6531656.html
Copyright © 2020-2023  润新知