1、题目避免重复;2、可定制(数量/打印方式);3、可以控制下列参数:
是否有乘除法;
是否有括号(最多可以支持十个数参与计算);
数值范围;
加减有无负数;
除法有无余数!
解题思路:
1、定义 SIZE 打印题数
2、定义是否有乘除法(用以改变随机符号范围)
3、定义加减有无负数(用以改变加减符号状况下,数值的范围)
4、定义除法有无余数(用除数*整数商 得到被除数,算式就写被除数/除数)
5、用for循环生成题目for(int i=0;i<SIZE;i++)
1、输入相关变量(有无负数、有无余数、有无乘除法、数值范围)
2、生成符号
3、生成第一个数
4、生成第二个数(若要求除法无余数,就在此定义第一个数)
5、得出算式 第一个数+符号+第二个数+=
其中需要用for循环来排除重复的(若重复,则 i-1,退出此循环,重新再大循环一次)
6、输出
(有无乘除 将影响是否显示 除法有无余数 的选项)
import java.util.Scanner; public class operations2 { public static int SIZE(int size)//定制数量 { int s; s=size; return s; } public static int MultiplyDivide(String p1)//是否有乘除法 { int m = 4; if(p1.equals("Y")){m=4;} if(p1.equals("N")){m=2;} return m; } public static String Negative(String p2)//加减有无负数 { String n; n=p2; return n; } public static String Remainder(String p3)//除法有无余数 { String r; r=p3; return r; } public static int Max(int max)//最大数 { int m; m=max; return m; } public static int Min(int min)//最小数 { int m; m=min; return m; } public static void Work(int MultiplyDivide,String Negative,String Remainder,int Max,int Min,int SIZE)//算式计算 { String Again[][]=new String[SIZE][1];//用数组装算式,用以判断是否重复 for(int i=0;i<SIZE;i++)//重复次数,用以确定算式多少 { int cha=Max-Min; int mid,nup1,ndown1,nup2,ndown2; String s1=new String(); String s2=new String(); String suanshi=new String(); String fuhao=new String();//符号判定 mid=(int)(Math.random()*MultiplyDivide); if(mid==0) fuhao="+"; if(mid==1) fuhao="-"; if(mid==2) fuhao="*"; if(mid==3) fuhao="/"; for(int j=0;j<2;j++)//两次循环,第一次为第一个数字,第二次为第二个数字 { int n1 =-99999,n2=-99999;//用于后面是否为分数的判定 int s=(int)(Math.random()*2);//随机数判定整数或分数,0->整数,1->分数 if(s==0)//整数 { if(Negative.equals("N")) { if(mid==0||mid==1) { while(n1<0) {n1=(int)(Min+Math.random()*(cha+1));} } else { n1=(int)(Min+Math.random()*(cha+1)); } } if(Negative.equals("Y")) {n1=(int)(Min+Math.random()*(cha+1));} } if(s==1)//分数 { n1=(int)(Min+Math.random()*(cha+1)); n2=(int)(Min+Math.random()*(cha+1)); if(Negative.equals("N")) { if(mid==0||mid==1) { while(n1<=0||n2<=0) { n1=(int)(Min+Math.random()*(cha+1)); n2=(int)(Min+Math.random()*(cha+1)); } } else { while(n1==0||n2==0) { n1=(int)(Min+Math.random()*(cha+1)); n2=(int)(Min+Math.random()*(cha+1)); } } } if(Negative.equals("Y")) { while(n1==0||n2==0) { n1=(int)(Min+Math.random()*(cha+1)); n2=(int)(Min+Math.random()*(cha+1)); } } int z1=Math.abs(n1),z2=Math.abs(n2); int chushu=2; if(z1>z2) { while(z2>=chushu) { if(z1%chushu==0&&z2%chushu==0) {z1=z1/chushu;z2=z2/chushu;} else {chushu++;} } } else if(z1<z2) { while(z1>=chushu) { if(z1%chushu==0&&z2%chushu==0) {z1=z1/chushu;z2=z2/chushu;} else {chushu++;} } } else { z1=1;z2=1; }; if(n1<0){n1=0-z1;} else {n1=z1;} if(n2<0){n2=0-z2;} else {n2=z2;} } if(j==0)//第一个数字 { nup1=n1;ndown1=n2; if(ndown1==-1&&nup1<0) {nup1=Math.abs(nup1);} if(ndown1==-1&&nup1>0) {nup1=0-nup1;} if(ndown1>-99999)//如果存在分母,则为分数 { if(Math.abs(ndown1)!=1) { if(nup1<0&&ndown1<0) {nup1=Math.abs(nup1);ndown1=Math.abs(ndown1);} if(ndown1<0) {s1="("+nup1+"/("+ndown1+"))"+"";} else {s1="("+nup1+"/"+ndown1+")"+"";} } if(Math.abs(ndown1)==1)//否则为整数 { if(nup1>=0) {s1=nup1+"";} if(nup1<0) {s1="("+nup1+")"+"";} } } else//否则为整数 { if(nup1>=0) {s1=nup1+"";} if(nup1<0) {s1="("+nup1+")"+"";} } } if(j==1)//第二个数字 { nup2=n1;ndown2=n2; if(mid==3)//当为除法时,除数不能为0, { while(nup2==0) {nup2=(int)(Min+Math.random()*(cha+1));}//分子或整数不能为0 } if(ndown2==-1&&nup2<0) {nup2=Math.abs(nup2);} if(ndown2==-1&&nup2>0) {nup2=0-nup2;} if(ndown2>-99999)//如果存在分母,则为分数 { if(Math.abs(ndown2)!=1) { if(nup2<0&&ndown2<0) {nup2=Math.abs(nup2);ndown2=Math.abs(ndown2);} if(ndown2<0) {s2="("+nup2+"/("+ndown2+"))"+"";} else {s2="("+nup2+"/"+ndown2+")"+"";} } else { if(nup2<0) { s2="("+nup2+")"+""; } if(nup2>0) { s2=nup2+""; } } } else//否则为整数 { if(nup2<0) { s2="("+nup2+")"+""; } if(nup2>0) { s2=nup2+""; } } if(mid==3&&Remainder.equals("N")) { nup1=nup2*n1;ndown1=ndown2; if(ndown1%n1==0) {ndown1=ndown1/n1;nup1=nup1/n1;} if(ndown1>-99999)//如果存在分母,则为分数 { if(Math.abs(ndown1)!=1) {s1="("+nup1+"/"+ndown1+")"+"";} else//否则为整数 { s1=nup1+""; } } else//否则为整数 { s1=nup1+""; } } } } suanshi=suanshi+s1+fuhao+s2+"=";//算式 Again[i][0]=suanshi; for(int k=0;k<(i+1);k++) { if(Again[i][0].equals(Again[k][0])){k--;break;} } System.out.println(suanshi); } } public static void main(String args[]) { String p3="Y"; Scanner pan=new Scanner(System.in); System.out.println("请输入定制数量:"); int size=pan.nextInt(); System.out.println("是否有乘除法,Y--有,N--没有"); String p1=pan.next(); System.out.println("加减有无负数,Y--有,N--没有"); String p2=pan.next(); if(p1.equals("Y")) { System.out.println("除法有无余数,Y--有,N--没有"); p3=pan.next(); } System.out.println("请输入数值范围最大值:"); int max=pan.nextInt(); System.out.println("请输入数值范围最小值:"); int min=pan.nextInt(); int zhi=SIZE(size); int a=MultiplyDivide(p1) ; String b=Negative(p2); String c=Remainder(p3); int d=Max(max); int e=Min(min); Work(a,b,c,d,e,zhi); } }
结果截图
项目计划日志
计划: | 花费5个小时完成任务 |
时间记录日志
日期 | 开始时间 | 结束时间 | 总计(分) | 活动 | 备注 |
16-3-14 |
8:00 |
9:50 | 100 | 上课 | |
16-3-15 | |||||
16-3-16 | 15:00 | 16:00 | 60 |
阅读《构建之法》第二章 复习一些java知识点 |
|
16-3-17 | 17:00 | 19:00 | 120 | 编写程序(四则运算2) | |
16-3-18 | |||||
16-3-19 | 14:10 | 17:30 | 200 |
编写程序(四则运算2) 发表博客 |
缺陷记录日志
日期 | 错误问题 |
3-17 | while的循环错误 |
3-19 | java中字符串等于的问题:如p3=="N"改为p3.equals("N") |
总结:犯的错误实在简单,依靠断点才找出问题,浪费了大量时间。