您的位置:首页 > 其它

软件工程个人作业03

2016-03-25 22:40 309 查看
设计思想:

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+"="+"\t");

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+"="+"\t");

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+"="+"\t");

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+"="+"\t");

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+"="+"\t");

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+"="+"\t");

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("输入错误!");}

}

}

运行结果截图:









编程总结分析:

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









工作照:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: