软件工程个人作业01

问题:像二柱子那样,花二十分钟写一个能自动生成三十道小学四则运算题目的 “软件”,要求:除了整数以外,还要支持真分数的四则运算(需要验证结果的正确性)、题目避免重复、可定制出题的数量。(有能力者改编成网页版)

1.程序设计思想

 

根据要求来决定程序的设计思想

(1)生成任意数量的四则运算:有输入结果个数的变量才行。

(2)支持真分数运算(需要验证结果的正确性):通过比较这两个数的大小,当分母大于分子时可以生成这个数,否则就不生成分数;要验证结果正确性就要将运算结果求出来。开始用的是字符表示的加减乘除,计算是只要将字符转化成真正的运算符即可。

(3)题目避免重复:这就要求有储存结果的空间,每生成一个就会和已有的作比较

2.源程序代码

/*

 * 要求:

 * 生成任意数量的四则运算:有输入结果个数的变量

 * 支持真分数运算(需要验证结果的正确性)当分母大于分子时可以生成这个数,否则就不生成分数

 * 题目避免重复:这就要求有储存结果的空间,每生成一个就会和已有的作比较

 * 完成时间:2个半小时

 */

import java.util.*;

 

public class yunsuan {

       public static void main(String args[])

       {

              Scanner input=new Scanner (System.in);

              System.out.println("请输入要生成四则运算的个数:");

              int n=input.nextInt();

             

              char fuhao;

              int suiji1,suiji2,suiji3,suiji4;//suiji1表示第一个数,suiji2表示第二个数,suiji4表示第三个数,suiji3表示符号

              //String yunsuan[] = null;

              String[] yunsuan = new String[100];

              double suiji;

              System.out.println("运算式和结果是:");

              int i=0;

              while(i<n)

              {

                     suiji1=suijishu();

                     suiji2=suijishu();//suiji1/suiji2

                     suiji3=suijizifu();

                     suiji4=suijishu();

                      if(suiji3==0)fuhao='+';

                   else if(suiji3==1)fuhao='-';

                   else if(suiji3==2)fuhao='*';

                   else fuhao='/';

                   if(suiji1<suiji2&&suiji2!=0)

                   {

                          String sj="";i++;

                         sj=suiji1+"/"+suiji2+""+fuhao+""+suiji4;

                         if(panduan(sj,yunsuan,i)==true)

                                {yunsuan[i-1]=sj;

                              display(suiji1,suiji2,suiji4,fuhao);

                                }

                        

                   }

                   else

                   {

                          String sj1="";

                                sj1=suiji1+""+fuhao+""+suiji4;i++;

                                if(panduan(sj1,yunsuan,i)==true)

                                {

                                       yunsuan[i-1]=sj1;

                                       display(suiji1,1,suiji4,fuhao);

                            }

             }

              }

       }

       //产生随机数

        public static int suijishu()

          {

                 int suiji;

                 suiji=(int)(Math.random()*100);

                 return suiji;

          }

        //产生随机字符

        public static int suijizifu()

          {

                 int suijifu;

                 suijifu=(int)(Math.random()*4);

                 return suijifu;

          }

        //输出四则运算和结果函数

        public static void display(int a1,int a2,int b,char c)

        {

              /* String aa="";

               aa=aa+a+c+b+"=";

               System.out.print(aa);*/

               if(a2==1)

               {

                      System.out.print(a1);

               }

               else  System.out.print(a1+"/"+a2);

               System.out.print(c);

               System.out.print(b+"=");

               double result = 0;

               if(c=='+')

               {

                     result=((double)a1/(double)a2)+(double)b;

               }

               else if(c=='-')

               {

                     result=((double)a1/(double)a2)-(double)b;          }

               else  if(c=='*')

               {

                       result=((double)a1/(double)a2)*(double)b;             }

               else  if(c=='/')

               {

                     result=((double)a1/(double)a2)/(double)b;

               }

               System.out.println(result);

        }

        public static boolean panduan(String a,String aa[],int i)

        {

               boolean flag = false ;//0表示不重复,1表示重复

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

               {flag=true;

                      if(a.equals(aa[m])){flag=false;break;}

                      else {flag=true;}

               }

               return flag;

        }

}

3.运行结果截图

 

 

4.不足之处,解决方案

结果还是有一些问题,虽然结果是小数形式,但是小数点后面的都用0代替了。后来将产生的int型的随机数强制转换成double类型,结果可以了

posted on 2017-03-06 20:35  一抹阳光~绚烂  阅读(163)  评论(0编辑  收藏  举报

导航