测试2-随机生成四则运算

本周Java课上,王建民老师组织我们进行了又一轮的测试,这次我们测试的题目为随机生成四则运算题

要求可以制定题目的数量,每行的数目,是否有乘除法,是否含有括号,取值范围等要求。

源码如下

package Test;
    import java.util.Random;
    import java.util.Scanner;
    public class class1 {
     public static void main(String []args)
     {
         Scanner sc=new Scanner(System.in);
         Random random=new Random();
         System.out.println("请输入题目数量");
         int x=sc.nextInt();
         System.out.println("请输入每行的数目");
         int y=sc.nextInt();
         System.out.println("请输入操作数的个数");
         int z=sc.nextInt();
         System.out.println("是否含有乘除法(1.是   2.否)");
         int m=sc.nextInt();
         System.out.println("是否含有括号(1.是   2.否)");
         int n=sc.nextInt();
         System.out.println("请输入操作数的取值范围");
         int s=sc.nextInt();
         int v=sc.nextInt();
         int[] op = new int[x];
         if(m==2)//不含有乘除法
         {
             if(n==2)//不含有括号
             {
             for(int i=0;i<x;i++)
             {
                 for(int j=0;j<z;j++)//建立一个循环来实现操作数的数量的相加
                 {
                     op[j]=(int)   (Math.random() * 2) ;//生成随机数来判断符号
                     int a = (int) (Math.random() * (v-11)) +s ; //生成一个s-v的随机数
                     if(j==z-1)
                     { 
                         System.out.print(a+"=        ");}
                     else
                         System.out.print(a+ getOP(op[j]));
                 }
                 if((i+1)%y==0)
                 {
                     System.out.print("\n");
                 }
             }
             }
         if(n==1)//含有括号
         {
             for(int i=0;i<x;i++)
             {
                 int b=(int)(Math.random()*2);
                    
                 for(int j=0;j<z;j++)
                 {
                     op[j]=(int)   (Math.random() * 4);
                     int a = (int) (Math.random() * (v-11)) +s ; 
                     if(b==1)
                {
                    if(j==z-1)
                     { 
                         System.out.print(a+"=        ");
                         }
                    else if(j==0)//对于括号位置的不同情况进行分类
                    {
                        System.out.print("("+a+ getOP(op[j]));
                    }
                     else
                         System.out.print(a+")"+ getOP(op[j]));
                }
                     else if (b==0)
                        {
                            if(j==z-1)
                             { 
                                 System.out.print(a+"=        ");
                                 }
                            else if(j==1)
                            {
                                System.out.print("("+a+ getOP(op[j]));
                            }
                            else if(j==0)
                            {
                                System.out.print(a+ getOP(op[j]));
                            }
                             else 
                                 System.out.print(a+")"+ getOP(op[j]));
                        }
                else {
                         if(j==z-1)
                         { 
                             System.out.print(a+"=        ");
                             }
                         else
                             System.out.print(a+ getOP(op[j]));
                 }
                 }
                 if((i+1)%y==0)
                 {
                     System.out.print("\n");
                 }
             }
         }
     }
     if(m==1)//含有乘除法
     {
         if(n==2)//不含括号
         for(int i=0;i<x;i++)
         {
             for(int j=0;j<z;j++)
             {
                 op[j]=(int)   (Math.random() * 4) ;
                 int a = (int) (Math.random() * (v-11)) +s ; 
                 if(n==2)
                 {
                 if(j==z-1)
                 { 
                     System.out.print(a+"=        ");}
                 else
                     System.out.print(a+ getOP(op[j]));
             }
             if(n==1)
             {
                 if(j==z-1)
                 { 
                     System.out.print(a+"=        ");}
                 else
                     System.out.print(a+ getOP(op[j]));
             }
             }
             if((i+1)%y==0)
             {
                 System.out.print("\n");
             }
         }
         if(n==1)//含有括号
         {
             for(int i=0;i<x;i++)
             {
                 int b=(int)(Math.random()*4);
                    
                 for(int j=0;j<z;j++)
                 {
                     op[j]=(int)   (Math.random() * 4);
                     int a = (int) (Math.random() * (v-11)) +s ; 
                     if(b==1)
                {
                    if(j==z-1)
                     { 
                         System.out.print(a+"=        ");
                         }
                    else if(j==0)
                    {
                        System.out.print("("+a+ getOP(op[j]));
                    }
                     else
                         System.out.print(a+")"+ getOP(op[j]));
                }
                     else if (b==0)
                        {
                            if(j==z-1)
                             { 
                                 System.out.print(a+"=        ");
                                 }
                            else if(j==1)
                            {
                                System.out.print("("+a+ getOP(op[j]));
                            }
                            else if(j==0)
                            {
                                System.out.print(a+ getOP(op[j]));
                            }
                             else 
                                 System.out.print(a+")"+ getOP(op[j]));
                        }
                else {
                         if(j==z-1)
                         { 
                             System.out.print(a+"=        ");
                             }
                         else
                             System.out.print(a+ getOP(op[j]));
                 }
                 }
                 if((i+1)%y==0)
                 {
                     System.out.print("\n");
                 }
             }
         }
     }
     }
     public static String getOP(int index)//建立一个函数通过代入一个树来生成随机的运算符
     {
         String string=" ";
         switch(index)
         {
         case 0: string="+";break;
         case 1:string ="-";break;
         case 2:string ="*";break;
         case 3:string ="/";break;
         }
         return string;
     }
    }

这道题的编写有投机取巧的成分,对于括号的随机分布仍不能完美实现。做完本周的测试,我深深感受到了代码简洁的重要性,在完成一个程序时,要将整个程序分割成不同的小部分来逐个实现。在一开始写这道题时,我将所有的功能都放在一起编写,当时我根本没有分清楚每个功能的实现情况,后来我通过分别实现不同的功能模块,然后将整个模块组合在一起,才完成这个程序

posted @ 2022-09-10 15:26  伽澄  阅读(37)  评论(0)    收藏  举报