• 软件工程个人作业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("输入错误!");}

     }              

    }

    运行结果截图:

          

    编程总结分析:

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

     

     工作照:

     

  • 相关阅读:
    基于flash的web视频对讲直播测试
    终于放弃Windows下丑陋的cmd
    直播推流兼容性问题追踪
    32位和64位dll判断
    H264编码参数的一些小细节
    cmake编译win下64位obs
    The certificate used to sign "XXX" has either expired or has been revoked
    记录一次Android交叉编译ffmpeg排查错误
    SDK "iphoneos" cannot be located
    av_interleaved_write_frame 网络不好的情况下返回较慢
  • 原文地址:https://www.cnblogs.com/jinpeigang/p/5321438.html
Copyright © 2020-2023  润新知