设计思想:
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("输入错误!");}
}
}
运行结果截图:
编程总结分析:
编程过程中将数字和算式转换成字符串输出是突然想到的,虽然减少了一定代码,但无法实现连除加括号的要求,而且在将数字和运算符存入数组时,由于将数组下标定义在了循环体内,导致无法输出正确的算式结果。只能一步一步输出,费了很大功夫才找到问题所在,所以以后编程一定要细心。
工作照: