---恢复内容开始---
设计思想:
先利用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; |