import java.util.Scanner; public class Yunsuan { public static void main(String[] args){ Scanner sc=new Scanner(System.in); int t=1,n=0; while(t!=0) { System.out.println("请选择: 1.整数运算 2.分数运算 0.退出"); t=sc.nextInt(); switch(t) { case 1:{zhengshu(); break; } case 2:{fenshu(); break; } } } } //化简分数;求最大公约数 public static int simple(int a,int b) { int c=0; if(a>b) { while(a!=b) { c=a-b; if(b>=c) { a=b; b=c; } if(c>b) { a=c; } } return a; } else { while(a!=b) { c=b-a; if(a>=c) { b=a; a=c; } if(c>a) { b=c; } } return a; } } //求最小公倍数 public static int gongbei(int a,int b) { int t=simple(a,b); return a*b/t; } //整数运算 public static void zhengshu() { Scanner sc=new Scanner(System.in); System.out.println("请输入题目数量:"); int n=sc.nextInt(); String a[]={"+","-","*","/"}; int b[]=new int [n]; int c[]=new int [n]; int d[]=new int [n]; for(int i=0;i<n;i++) { b[i]=(int) (Math.random()*100); //产生随机数 c[i]=(int) (Math.random()*100); d[i]=(int) (Math.random()*4); boolean f = false; for(int j=i-1;j>=0;j--) { if(b[i]==b[j]&&c[i]==c[j]&&d[i]==d[j]) { f = true; break; } } if(f == true||(d[i]==1&&b[i]<c[i])||(d[i]==3&&c[i]==0)) //限制不能重复,当为减法的时候,被减数大于减数,当为除法,被除数不为0 i--; else { System.out.print("第"+(i+1)+"题"+": "+b[i]+" "+a[d[i]]+" "+c[i]+" ="); String q=sc.next(); String w1=""+(b[i]+c[i]); //将数化为String类型 String w2=""+(b[i]-c[i]); String w3=""+(b[i]*c[i]); String w4=""+(b[i]/c[i]); if(d[i]==0&&q.equals(w1)) System.out.println("恭喜你,回答正确!"); else if(d[i]==0&&!(q.equals(w1))) System.out.println("回答错误! 正确结果为:"+w1); if(d[i]==1&&q.equals(w2)) System.out.println("恭喜你,回答正确!"); else if(d[i]==1&&!(q.equals(w2))) System.out.println("回答错误! 正确结果为:"+w2); if(d[i]==2&&q.equals(w3)) System.out.println("恭喜你,回答正确!"); else if(d[i]==2&&!(q.equals(w3))) System.out.println("回答错误! 正确结果为:"+w3); if(d[i]==3) { if((b[i]%c[i]==0&&q.equals(w4))) { System.out.println("恭喜你,回答正确!"); } else if(b[i]%c[i]!=0) { int t=simple(b[i],c[i]); b[i]/=t;c[i]/=t; w4=""+b[i]+"/"+c[i]; if(q.equals(w4)) { System.out.println("恭喜你,回答正确!"); } } } else if(d[i]==3) System.out.println("回答错误! 正确结果为:"+w4); } } } public static void fenshu() { Scanner sc=new Scanner(System.in); System.out.println("请输入题目数量:"); int n=sc.nextInt(); String a[]={"+","-","*","/"}; int b1[]=new int [n]; int b2[]=new int [n]; int c1[]=new int [n]; int c2[]=new int [n]; int d[]=new int [n]; for(int i=0;i<n;i++) { b1[i]=(int) (Math.random()*100); //产生随机数 b2[i]=(int) (Math.random()*100); c1[i]=(int) (Math.random()*100); c2[i]=(int) (Math.random()*100); d[i]=(int) (Math.random()*4); boolean f = false; for(int j=i-1;j>=0;j--) { if(b1[i]==b1[j]&&b2[i]==b2[j]&&c1[i]==c1[j]&&c2[i]==c2[j]&&d[i]==d[j])//查重 { f=true; break; } } if(f==true||(b1[i]>=b2[i])||(c1[i]>=c2[i])||(b2[i]==0)||(c2[i]==0)||(b1[i]==0)||(c1[i]==0))//分子大于分母,都不为0 { i--; } else { int t1=simple(b1[i],b2[i]); int t2=simple(c1[i],c2[i]); b1[i] /= t1; //都化为最简 b2[i] /= t1; c1[i] /= t2; c2[i] /= t2; int t=gongbei(b2[i],c2[i]); //最小公倍数 int y1=t/b2[i]; //最小公倍数除以分母 int y2=t/c2[i]; b1[i]*=y1; //同分后的分子 c1[i]*=y2; //同分后的分子 int p1=b1[i]+c1[i]; int p2=b1[i]-c1[i]; if(d[i]==0&&p1>=t) { i--; continue; } else if(d[i]==1&&p2<=0) { i--; continue; } else if(d[i]==2&&((b1[i]/y1)*(c1[i]/y2)>=b2[i]*c2[i])) //乘除的时候按同分前的分子,分母计算 { i--; continue; } else if(d[i]==3&&((b1[i]/y1*c2[i])>=(b2[i]*c1[i]/y2))) { i--; continue; } else { System.out.print("第"+(i+1)+"题: "+"("+(b1[i]/y1)+"/"+b2[i]+")"+" "+a[d[i]]+" "+"("+(c1[i]/y2)+"/"+c2[i]+")"+" "+"="); String q=sc.next(); if(d[i]==0) { int t3=simple(p1,t); p1 /=t3; t /=t3; String w1=""+p1+"/"+t; if(q.equals(w1)) System.out.println("恭喜你,回答正确!"); else System.out.println("回答错误! 正确结果为:"+w1); } else if(d[i]==1) { int t3=simple(p2,t); p2 /=t3; t /=t3; String w1=""+p2+"/"+t; if(q.equals(w1)) System.out.println("恭喜你,回答正确!"); else System.out.println("回答错误! 正确结果为:"+w1); } else if(d[i]==2) { b1[i] /=y1; b1[i] *=(c1[i]/y2); b2[i] *=c2[i]; int t3=simple(b1[i],b2[i]); b1[i] /=t3; b2[i] /=t3; String w1=""+b1[i]+"/"+b2[i]; if(q.equals(w1)) System.out.println("恭喜你,回答正确!"); else System.out.println("回答错误! 正确结果为:"+w1); } else if(d[i]==3) { b1[i] /=y1; b1[i] *=c2[i]; b2[i] *=c1[i]; int t3=simple(b1[i],b2[i]); b1[i] /=t3; b2[i] /=t3; String w1=""+b1[i]+"/"+b2[i]; if(q.equals(w1)) System.out.println("恭喜你,回答正确!"); else System.out.println("回答错误! 正确结果为:"+w1); } } } } } }
设计思想
1.设置几个数组,将随机产生的100以内数存入其中,在一个数组里分别存入加减乘除,利用产生的三以内的整数,确定运算符号;
2.添加限制,将产生负数,和上面的算式相同的排除掉,重新产生随机数。
3.计算出结果,与输入的结果进行比较。
4.在计算真分数的时候,先计算出分子和分母的最大公约数,将式子化简,进行加法运算的时候,先求出两个数的分母的最小公倍数,
进行同分,让分子进行加减,由于不能有假分数,将两个分子相加大于最小公倍数的排除,重新产生随机数,由于结果也是分数形式,只能用String类型的,
将计算的结果转化成String类型,String q=“”+分子+"/"+分母;再将结果与之比较
运行截图
没按预期时间完成的主要原因是不能清楚地理解题目的意思,老是改,是不是真分数包括带分数,来回的改。
基础还是不太扎实,有时还会对逻辑关系分不清。