软件工程个人作业03

设计思想:  

          1  将简单的四则运算与混合四则运算分开,供用户选择。

          2  简单四则运算让计算机算出结果与用户输入结果进行比较。

          3 混合四则运算输出算式时,产生一个大于2的随机数作为算式中整数的个数,先随机产生第一个数,转换成字符串,在循环产生相同数目的整数和运算符,将整       数转换成字符串,同时每次循环,都按算式形式赋值给一个字符串,将整数转换成字符串,然后所有随机数和运算符存入两个数组。最后输出字符串,也就是混合算       式。

          4   混合四则运算计算时,先从字符数组中,找到乘除,进行运算,第一个乘数运算后变成0,将结果赋值给第二个乘数,乘号变为加号,除法也是如此,在计算       加减,运算符不再改变,其他和乘除操作一样。最后输出数组最后一位,即为结果,与用户输入进行比较。

 

源程序代码:

import java.util.Scanner;

public class Cesh{

         public static void main(String []args){

                  

   int a,b,c,n=0,m=0,q,w;

   double anwser1,anwser2=0;int R=0,W=0; //anwser1 用户答案    anwser2 正确答案    R 答对数量 W  答错题数

    Scanner reader=new Scanner(System.in);

  System.out.print("整数运算请选 1,混合运算请选2:");

    n=reader.nextInt();

    if(n!=1&&n!=2)

    {do{

             System.out.println("输入错误!请重新输入!");

             System.out.print("整数运算请选 1,混合运算请选2:");

        n=reader.nextInt();

             }while(n!=1&&n!=2);

    }

    System.out.print("请选择题目数量:");

    m=reader.nextInt();

    System.out.print("请选择范围:");

    q=reader.nextInt();

    w=reader.nextInt();

     //整数

    if(n==1)

   {   int e,f,g;

   System.out.print("请选择是否有乘除: 1 有     2 无");

   e=reader.nextInt();

   System.out.print("请选择加减有无负数: 1 有     2 无");

   f=reader.nextInt();

   System.out.print("请选择乘除有无余数: 1 有     2 无");

   g=reader.nextInt();

 

    for(int i=1;i<=m;i++)

    {    int z[]=new int[m+1];int x[]=new int[m+1];int v[]=new int[m+1];

             a=(int)(Math.random()*(w-q+1)+q);

             b=(int)(Math.random()*(w-q+1)+q);

        if(e==1)              //控制运算有乘除  

            {c=(int)(Math.random()*4+0);}

        else                 //控制运算无乘除

            { c=(int)(Math.random()*2+0);}

       z[i]=a;x[i]=b;v[i]=c;    //将随机产生的数存入三个数组

       for(int j=1;j<=i-1;j++)   //通过判断随机数的异同控制是否重复

       {

              if(z[i]==z[j]&&x[i]==x[j]&&v[i]==v[j])

            {  do        //重复则重新生成ab

               {

                   a=(int)(Math.random()*(w-q+1)+q);

               b=(int)(Math.random()*(w-q+1)+q);

               }while(z[i]==z[j]&&x[i]==x[j]&&v[i]==v[j]);

            }

       }

        switch(c)

                  { case 0:

                            

                               System.out.println(a+"+"+b+"="+" ");

                               System.out.print("请输入你的答案:");

                               anwser1=reader.nextDouble();

                               anwser2=a+b;

                               if(anwser1==anwser2)

                               {System.out.println("恭喜!输入正确!");R++;}

                                  else

                                    {System.out.println("Sorrry!输入错误!");W++;

                                    System.out.println("正确答案是:"+anwser2);}       

                               break;

                    case 1:

                               if(f==1)    //加减有余数

                                 {System.out.println(a+"-"+b+"="+" ");

                                 System.out.print("请输入你的答案:");

                            anwser1=reader.nextDouble();

                            anwser2=a-b;

                            if(anwser1==anwser2)

                            {System.out.println("恭喜!输入正确!");R++;}

                               else

                                 {System.out.println("Sorrry!输入错误!");W++;

                                 System.out.println("正确答案是:"+anwser2);}       

                                 break;}

                               else        //加减无余数

                                 {if(a<b) 

                                     {i--;break;}

                                  else

                                     {System.out.println(a+"-"+b+"="+" ");

                                     System.out.print("请输入你的答案:");

                                            anwser1=reader.nextDouble();

                                            anwser2=a-b;

                                            if(anwser1==anwser2)

                                            {System.out.println("恭喜!输入正确!");R++;}

                                               else

                                                 {System.out.println("Sorry!输入错误!");W++;

                                                 System.out.println("正确答案是:"+anwser2);}       

                                           }

                                 }

               case 2:

                               System.out.println(a+"*"+b+"="+" ");

                               System.out.print("请输入你的答案:");

                               anwser1=reader.nextDouble();

                               anwser2=a*b;

                               if(anwser1==anwser2)

                               {System.out.println("恭喜!输入正确!");R++;}

                                  else

                                    {System.out.println("Sorry!输入错误!");W++;

                                    System.out.println("正确答案是:"+anwser2);}       

                               break;

                    case 3:

                               if(b==0)  //除数为0 则跳出循环i减一

                                   {i--;break;}

                               else if(b!=0&&g==2) //乘除无余数

                                   { 

                                           if(a%b==0)

                                            {System.out.println(a+"/"+b+"="+" ");

                                            System.out.print("请输入你的答案:");

                                            anwser1=reader.nextDouble();

                                            anwser2=a/b;

                                            if(anwser1==anwser2)

                                            {System.out.println("恭喜!输入正确!");R++;}

                                                else

                                                 {System.out.println("Sorry!输入错误!");W++;

                                                 System.out.println("正确答案是:"+anwser2);}       

                                             }

                                           else

                                            {i--;break;}

                                   }

                               else if(b!=0&&g==1)    //乘除有余数

                                   {  if(a%b==0)

                                        {i--;break;}

                                      else

                                             {System.out.println(a+"/"+b+"="+" ");

                                             System.out.print("请输入你的答案:");

                                                      anwser1=reader.nextDouble();

                                                      anwser2=a/b;

                                                      if(anwser1==anwser2)

                                                      {System.out.println("恭喜!输入正确!");R++;}

                                                         else

                                                           {System.out.println("Sorry!输入错误!");W++;

                                                           System.out.println("正确答案是:"+anwser2);}       

                                                      }

                                   break;

                        }

                  }

   }

    System.out.println("一共答对了"+R+"道题!");

    System.out.println("一共答错了"+W+"道题!"); 

}  

   if(n==2)

   {   

            char Q[]={'+','-','*','/'};

            for(int i=0;i<m;i++)

           { 

            int num1,num2,num3,num4,p,p1;

            num4=(int)(Math.random()*9+2); //随机产生混合运算中整数的个数

            double[] j=new double[num4];char[]k=new char[num4];

            num2=(int)(Math.random()*(w-q+1)+q);//随机产生第一个整数

            j[0]=num2;

            String str1=String.valueOf(num2);  //将随机产生的第一个整数转换成字符串形式

            int y=1,l=0;

            for(int z=0;z<num4-1;z++)     //循环产生num4-1个运算符和参加混合运算的整数

              {  

                      num1=(int)(Math.random()*4+0);

                      num3=(int)(Math.random()*(w-q+1)+q);

                      j[y]=num3;k[l]=Q[num1];     //将产生的整数以及运算符存入两个数组中

                      ++y;++l;

                      String str2=String.valueOf(num3);//将num3转换成字符串

                      str1=str1+Q[num1]+str2;  //按混合运算的形式变成字符串

              }

            System.out.println(str1+"=");

            System.out.print("请输入你的答案:");

            anwser1=reader.nextDouble();

              for(p=0;p<num4-1;p++)    //混合四则运算的计算   遍历所有运算符先计算乘除,再计算加减

              {

                       if(k[p]=='*')

                                 

                       {  

                                 j[p+1]=j[p]*j[p+1];

                           j[p]=0;

                           k[p]='+';

                       }

                       else if(k[p]=='/')

                       {

                                 j[p+1]=j[p]/j[p+1];

                           j[p]=0;

                           k[p]='+';

                       }

                       

              }

              for(p1=0;p1<num4-1;p1++)

              {

                       if(k[p1]=='+')

                       {

                                 j[p1+1]=j[p1]+j[p1+1];

                           j[p1]=0;

                       }

                       else if(k[p1]=='-')

                       {

                                 j[p1+1]=j[p1]-j[p1+1];

                           j[p1]=0;

                       }

              }

              anwser2=j[num4-1];

              if(anwser1==anwser2)

              {System.out.println("恭喜!输入正确!");R++;}

            else

              {System.out.println("Sorry!输入错误!");W++;

              System.out.println("正确答案是:"+anwser2);}

          }

              System.out.println("一共答对了"+R+"道题!");

              System.out.println("一共答错了"+W+"道题!");  

   }

   else

   {System.out.println("输入错误!");}

 }              

}

运行结果截图:

      

编程总结分析:

        编程过程中将数字和算式转换成字符串输出是突然想到的,虽然减少了一定代码,但无法实现连除加括号的要求,而且在将数字和运算符存入数组时,由于将数组下标定义在了循环体内,导致无法输出正确的算式结果。只能一步一步输出,费了很大功夫才找到问题所在,所以以后编程一定要细心。

 

 工作照:

 

原文地址:https://www.cnblogs.com/jinpeigang/p/5321438.html