---恢复内容开始---
设计思想:
先利用switch选择是整数运算还是分数运算,再分别选择有无余数和负数,然后输入产生式子的个数,
定义数组,分别产生随机数赋给数组,判断产生的式子是否与之前产生的式子相同,如果相同,i--,再到for循环中i++,
相当于重新为第i个数组元素赋值,如此循环,直到产生的式子跟之前的不一样为止,然后再判断运算符是否为“-”,
根据之前选择的是否含有负数,分别进行实现,如果选择没有负数,则将减数小于被减数的全部排除,如果选择有负数,
与之前同理;如果运算符是“/”,则根据之前选择的有无余数,分别实现,将正确结果转化为String类型,
String w=""+(b[i]/c[i])+"..."+(b[i]%c[i]);再将输入的结果与之比较,看结果是否正确;如果结果既不是“-”,
也不是“/”,则正常计算。当没有乘除的时候,只是判断有无余数,很简单。至于添加括号,暂时还未解决。
计算分数的时候,当产生负数的时候,先同分,将分子相减,取得负数的时候,先取负数的绝对值,将分子的绝对值与分母进行化简。在负的分子取绝对值的时候,不能用零去减,直接p=-p;
import java.util.Scanner; public class SiZeYunSuan02 { 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() { System.out.println("请选择 1.有乘除 2.无乘除 3.有括号 "); Scanner sc=new Scanner(System.in); int t4=sc.nextInt(); switch(t4) { case 1:{ //3.6添加乘除 System.out.println("请选择减法下是否有负数 1.有负数 2.无负数"); int n1=sc.nextInt(); System.out.println("请选择除法下是否有余数 1.有余数 2.无余数"); int n2=sc.nextInt(); 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]==3&&c[i]==0)) //限制不能重复,当为减法的时候,被减数大于减数,当为除法,被除数不为0 i--; else if(d[i]==1) { switch(n1) { case 1:{ if(b[i]>=c[i]) i--; else { System.out.print("第"+(i+1)+"题"+": "+b[i]+" "+a[d[i]]+" "+c[i]+" ="); String w2=""+(b[i]-c[i]); String q=sc.next(); if(q.equals(w2)) System.out.println("恭喜你,回答正确!"); else System.out.println("回答错误! 正确结果为:"+w2); } break; } case 2:{ if(b[i]<=c[i]) i--; else{ System.out.print("第"+(i+1)+"题"+": "+b[i]+" "+a[d[i]]+" "+c[i]+" ="); String w2=""+(b[i]-c[i]); String q=sc.next(); if(q.equals(w2)) System.out.println("恭喜你,回答正确!"); else System.out.println("回答错误! 正确结果为:"+w2); } break; } } } else if(d[i]==3) { switch(n2) { case 1:{ if(b[i]%c[i]==0) {i--;} else{ System.out.print("第"+(i+1)+"题"+": "+b[i]+" "+a[d[i]]+" "+c[i]+" ="); String q=sc.next(); String w2=""+(b[i]/c[i])+"..."+(b[i]%c[i]); if(q.equals(w2)) System.out.println("恭喜你,回答正确!"); else System.out.println("回答错误! 正确结果为:"+w2); } break; } case 2:{ if(b[i]%c[i]!=0) {i--;} else { System.out.print("第"+(i+1)+"题"+": "+b[i]+" "+a[d[i]]+" "+c[i]+" ="); String q=sc.next(); String w2=""+(b[i]/c[i]); if(q.equals(w2)) System.out.println("恭喜你,回答正确!"); else System.out.println("回答错误! 正确结果为:"+w2); } break; } } } 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 w3=""+(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]==2&&q.equals(w3)) System.out.println("恭喜你,回答正确!"); else if(d[i]==2&&!(q.equals(w3))) System.out.println("回答错误! 正确结果为:"+w3); } } break; } case 2:{ //3.7没有乘除号,只有加减 System.out.println("请选择减法下是否有负数 1.有负数 2.无负数"); int n1=sc.nextInt(); 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()*2); 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) //限制不能重复,当为减法的时候,被减数大于减数,当为除法,被除数不为0 i--; else if(d[i]==1) { switch(n1) { case 1:{ if(b[i]>=c[i]) {i--;} else { System.out.print("第"+(i+1)+"题"+": "+b[i]+" "+a[d[i]]+" "+c[i]+" ="); String w2=""+(b[i]-c[i]); String q=sc.next(); if(q.equals(w2)) System.out.println("恭喜你,回答正确!"); else System.out.println("回答错误! 正确结果为:"+w2); } break; } case 2:{ if(b[i]<=c[i]) {i--;} else{ System.out.print("第"+(i+1)+"题"+": "+b[i]+" "+a[d[i]]+" "+c[i]+" ="); String w2=""+(b[i]-c[i]); String q=sc.next(); if(q.equals(w2)) System.out.println("恭喜你,回答正确!"); else System.out.println("回答错误! 正确结果为:"+w2); } break; } } } else { System.out.print("第"+(i+1)+"题"+": "+b[i]+" "+a[d[i]]+" "+c[i]+" ="); String q=sc.next(); String w1=""+(b[i]+c[i]); //将数化为String类型 if(d[i]==0&&q.equals(w1)) System.out.println("恭喜你,回答正确!"); else if(d[i]==0&&!(q.equals(w1))) System.out.println("回答错误! 正确结果为:"+w1); } } break; } case 3:{ 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()*6); 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("请选择 1.有乘除 2.无乘除 3.有括号 "); int t4=sc.nextInt(); switch(t4) { case 1:{ //分数 有乘除 System.out.println("请选择减法下是否有负数 1.有负数 2.无负数"); int n1=sc.nextInt(); 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 if(d[i]==1) { 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 p2=b1[i]-c1[i]; switch(n1) { case 1:{ //有负数 if(p2>=0) i--; else { System.out.print("第"+(i+1)+"题: "+"("+(b1[i]/y1)+"/"+b2[i]+")"+" "+a[d[i]]+" "+"("+(c1[i]/y2)+"/"+c2[i]+")"+" "+"="); String q=sc.next(); p2=-p2; 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); } break; } case 2:{ //无负数 if(p2<=0) i--; else { System.out.print("第"+(i+1)+"题: "+"("+(b1[i]/y1)+"/"+b2[i]+")"+" "+a[d[i]]+" "+"("+(c1[i]/y2)+"/"+c2[i]+")"+" "+"="); String q=sc.next(); 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); } break; } } } 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]==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]==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]/y2); 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); } } } } break; } case 2:{ //分数只有加减,无乘除法 System.out.println("请选择减法下是否有负数 1.有负数 2.无负数"); int n1=sc.nextInt(); 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()*2); 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 if(d[i]==1) { 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 p2=b1[i]-c1[i]; switch(n1) { case 1:{ //有负数 if(p2>=0) i--; else { System.out.print("第"+(i+1)+"题: "+"("+(b1[i]/y1)+"/"+b2[i]+")"+" "+a[d[i]]+" "+"("+(c1[i]/y2)+"/"+c2[i]+")"+" "+"="); String q=sc.next(); p2=-p2; 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); } break; } case 2:{ //无负数 if(p2<=0) i--; else { System.out.print("第"+(i+1)+"题: "+"("+(b1[i]/y1)+"/"+b2[i]+")"+" "+a[d[i]]+" "+"("+(c1[i]/y2)+"/"+c2[i]+")"+" "+"="); String q=sc.next(); 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); } break; } } } 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 { 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); } } } } break; } } } }
截图
---恢复内容结束---
项目计划总结
日期/任务 |
听课/分钟 |
编写程序/分钟 |
阅读课本/分钟 |
日总计/分钟 |
3.6 周一 |
100 |
30 |
130 |
|
周二 |
60 |
60 |
||
周三 |
120 |
120 |
||
周四 |
60 |
60 |
||
周五 |
80 |
80 |
||
周总结 |
100 |
350 |
0 |
450 |
时间记录日志
日期 |
开始时间 |
结束时间 |
中断时间 |
净时间 |
活动 |
|
3.6周一 |
14:00 |
15:50 |
100 |
上课 |
||
周二 |
19:00 |
22:00 |
120 |
编程 |
||
周三 |
14:00 |
16:50 |
120 |
编程 |
||
周四 |
19:00 |
20:50 |
60 |
编程 |
||
周五 |
19:00 |
21:00 |
80 |
编程、写报告 |
缺陷记录日志
日期 |
编号 |
引入阶段 |
排除阶段 |
修复时间 |
|
|
3.9 周四 |
01 |
编码 |
变译 |
50 |
||
描述:在真分数相减的差为负数,并化简分数时,将负数的分子先取绝对值再化简,不能用p=0-p;而应该直接p=-p; |