个人作业1——四则运算题目生成程序(基于控制台)
2017-03-07 21:54
465 查看
一、需求分析
1、题目要求:
看了大家对于本课程的目标和规划,很多同学都希望能提高自己的实践能力,没有捷径可走,就是练习、练习再练习!那么就从第一个个人项目开始吧,用一周的时间完成一个基于控制台的四则运算程序,实现一个自动生成小学四则运算题目的命令行程序
从《构建之法》第一章的 “程序” 例子出发,像阿超那样,花二十分钟写一个能自动生成小学四则运算题目的命令行 “软件”,满足以下需求:
1、除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24
2、运算符为 +, −, ×, ÷
3、并且要求能处理用户的输入,并判断对错,打分统计正确率。
4、要求能处理用户输入的真分数, 如 1/2, 5/12 等
5、使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目
Myapp.exe -n 10
2、题目分析:
(1)是基于小学的四则运算题目,所以不会出现负数的结果,且只有两个数的简单四则运算;
(2)支持真分数和整数的运算;
(3)能够判断对错,若错误则输出正确答案;
(4)能够计算正确率并输出。
二、功能设计
三、设计实现
四、代码说明
真分数生成:
最大公约数:
最小公倍数:
生成真分数的四则运算及判断对错:
main类:
五、测试运行
六、PSP
七、小结
对java并不是很熟悉,所以写得很艰难,边百度边学边写,一开始并不知道怎么写,只能慢慢摸索,结果就是程序疯狂报错,最后好不容易才写完了_(:зゝ∠)_
因为用了很多的if嵌套语句,有的if语句还是后来添上的,大括号经常丢了,然后对个半天。。。。以及我没法把程序打包成exe文件,弄了半天还是不行,百度了也没解决_(:зゝ∠)_
我在真分数运算的createFraction类里的最大公约数那写了个异常抛出,在没写之前是经常给我报被除数为零的异常错误,我不知道错哪里了= =,而且我在整数运算里并没有写异常抛出也没报过错啊。。。。最后百度了半天才写了个异常抛出,然而并不知道到底写对了没_(:зゝ∠)_。。。
码市地址:https://git.coding.net/Belong033/java-Frist.git
1、题目要求:
看了大家对于本课程的目标和规划,很多同学都希望能提高自己的实践能力,没有捷径可走,就是练习、练习再练习!那么就从第一个个人项目开始吧,用一周的时间完成一个基于控制台的四则运算程序,实现一个自动生成小学四则运算题目的命令行程序
从《构建之法》第一章的 “程序” 例子出发,像阿超那样,花二十分钟写一个能自动生成小学四则运算题目的命令行 “软件”,满足以下需求:
1、除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24
2、运算符为 +, −, ×, ÷
3、并且要求能处理用户的输入,并判断对错,打分统计正确率。
4、要求能处理用户输入的真分数, 如 1/2, 5/12 等
5、使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目
Myapp.exe -n 10
2、题目分析:
(1)是基于小学的四则运算题目,所以不会出现负数的结果,且只有两个数的简单四则运算;
(2)支持真分数和整数的运算;
(3)能够判断对错,若错误则输出正确答案;
(4)能够计算正确率并输出。
二、功能设计
1、自动随机生成真分数和整数; 2、随机生成一则简单的四则运算题目; 3、能够计算题目,并判断用户输入的答案正确与否,若错误则输出正确答案; 4、能够计算用户答题的正确率。
三、设计实现
java类有:createFraction、createInteger、main三类: (1)createFraction:是负责随机创造两个真分数并组成四则运算,有真分数的运算方法,公约数的计算方法,最小公倍数的计算方法; (2)createInteger:是负责随机创造两个整数并组成四则运算,有整数的运算方法,公约数的判断方法等; (3)main:负责调用createFraction、createInteger两类,随机选择真分数或整数的四则运算组成多个题目并输出正确率。
四、代码说明
真分数生成:
public static int[] createFraction(){ int[] fraction=new int[2]; int fraction1 = (int)(Math.random()*10+1);//避免分子出现零 int fraction2 = (int)(Math.random()*10+1);//避免分母出现零 if(fraction1!=fraction2){ //避免出现分母分子相同 if(fraction1<fraction2){ //避免出现假分数 fraction[0]=fraction1; fraction[1]=fraction2; return fraction; }else{ fraction[0]=fraction2; fraction[1]=fraction1; return fraction; } }else createFraction(); return fraction; }
最大公约数:
public static int GCD(int m, int n) { //辗转相除法求最大公约数 if (n == 0) { throw new IllegalArgumentException("Argument 'divisor' is 0"); } else { if ((m = m % n) == 0) return n; else return m; } }
最小公倍数:
public static int LCM(int m, int n) { //求最小公倍数 return m*n/GCD(m,n); }
生成真分数的四则运算及判断对错:
public static void main(String[] args) { // TODO Auto-generated method stub Scanner in = new Scanner(System.in);//真分数的计算 int op=(int)(Math.random()*4+1); int[] f1 = createFraction(); int[] f2 = createFraction(); int j=GCD(f1[0],f1[1]); f1[0]=f1[0]/j; f1[1]=f1[1]/j; j=GCD(f2[0],f2[1]); f2[0]=f2[0]/j; f2[1]=f2[1]/j; int gbs = LCM(f1[1],f2[1]); if(op==1){//加法 System.out.println("("+f1[0]+"/"+f1[1]+")+("+f2[0]+"/"+f2[1]+")="); int num1=f1[0]*f2[1]+f2[0]*f1[1]; int num2=f1[1]*f2[1]; int num3=GCD(num1,num2); num1=num1/num3; num2=num2/num3; String a=new String(); if(num1==num2) { a="1"; } else { a=num1+"/"+num2; } String ans=in.next(); if(ans.equals(a)) { System.out.println("true"); } else { System.out.println("false"); System.out.println("The correct answer is "+a); wrong=wrong+1; } } if(op==2){//减法 int num1=f1[0]*f2[1]-f2[0]*f1[1]; if(num1>0){ //防止出现负数 System.out.println("("+f1[0]+"/"+f1[1]+")-("+f2[0]+"/"+f2[1]+")="); int num2=f1[1]*f2[1]; String a=new String(); if(num1==0) { a="0"; } else { int num3=Math.abs(GCD(num1,num2)); num1=num1/num3; num2=num2/num3; if(num1==num2) { a="1"; } else { a=num1+"/"+num2; } } String ans=in.next(); if(ans.equals(a)) { System.out.println("true"); } else { System.out.println("false"); System.out.println("The correct answer is "+a); wrong=wrong+1; } }else{ System.out.println("("+f2[0]+"/"+f2[1]+")-("+f1[0]+"/"+f1[1]+")="); int num11=f2[0]*f1[1]-f1[0]*f2[1]; int num2=f1[1]*f2[1]; String a=new String(); if(num11==0) { a="0"; } else { int num3=Math.abs(GCD(num11,num2)); num11=num11/num3; num2=num2/num3; if(num11==num2) { a="1"; } else { a=num11+"/"+num2; } } String ans=in.next(); if(ans.equals(a)) { System.out.println("true"); } else { System.out.println("false"); System.out.println("The correct answer is "+a); wrong=wrong+1; } } } if(op==3){//乘法 System.out.println("("+f1[0]+"/"+f1[1]+")*("+f2[0]+"/"+f2[1]+")="); int num1= f1[0]*f2[0]; int num2 = f1[1]*f2[1]; int num3=GCD(num1,num2); String a=new String(); num1= num1/num3; num2 = num2/num3; if(num1==num2) { a="1"; } else { a=num1+"/"+num2; } String ans=in.next(); if(ans.equals(a)) { System.out.println("true"); } else { System.out.println("false"); System.out.println("The correct answer is "+a); wrong=wrong+1; } } if(op==4){//除法 System.out.println("("+f1[0]+"/"+f1[1]+")÷("+f2[0]+"/"+f2[1]+")="); int num1= f1[0]*f2[1]; int num2 = f1[1]*f2[0]; int num3=GCD(num1,num2); String a=new String(); num1= num1/num3; num2 = num2/num3; if(num1==num2) { a="1"; } else { a=num1+"/"+num2; } String ans=in.next(); if(ans.equals(a)) { System.out.println("true"); } else { System.out.println("false"); System.out.println("The correct answer is "+a); wrong=wrong+1; } } }
main类:
public static void main(String[] args) { // TODO Auto-generated method stub int wrong; createFraction f = new createFraction(); createInteger i = new createInteger(); System.out.println("Please enter the subject number:"); Scanner a = new Scanner(System.in); int n = a.nextInt(); int m = (int)(Math.random()*n+1);//随机整数题目和分数题目的题量 for(int j=0;j<(n-m);j++){//整数题目 f.main(null); } for(int j=0;j<m;j++){//分数题目 i.main(null); } wrong=f.wrong+i.wrong;//计算正确率 int sum=100-(wrong*100/n); System.out.println("The accuracy is:"+sum+"%"); }
五、测试运行
六、PSP
七、小结
对java并不是很熟悉,所以写得很艰难,边百度边学边写,一开始并不知道怎么写,只能慢慢摸索,结果就是程序疯狂报错,最后好不容易才写完了_(:зゝ∠)_
因为用了很多的if嵌套语句,有的if语句还是后来添上的,大括号经常丢了,然后对个半天。。。。以及我没法把程序打包成exe文件,弄了半天还是不行,百度了也没解决_(:зゝ∠)_
我在真分数运算的createFraction类里的最大公约数那写了个异常抛出,在没写之前是经常给我报被除数为零的异常错误,我不知道错哪里了= =,而且我在整数运算里并没有写异常抛出也没报过错啊。。。。最后百度了半天才写了个异常抛出,然而并不知道到底写对了没_(:зゝ∠)_。。。
码市地址:https://git.coding.net/Belong033/java-Frist.git
相关文章推荐
- 个人作业1——四则运算题目生成程序(java代码,基于控制台)
- 个人作业1——四则运算题目生成程序(基于控制台)
- 个人作业1——四则运算题目生成程序(基于控制台)
- 个人作业1——四则运算题目生成程序(基于控制台)
- 个人作业1——四则运算题目生成程序(基于控制台)
- 个人作业1——四则运算题目生成程序(基于控制台)
- 个人作业1——四则运算题目生成程序(基于控制台)
- 个人作业1——四则运算题目生成程序(基于控制台)
- 个人作业1——四则运算题目生成程序(基于控制台)
- 个人作业1——四则运算题目生成程序(基于控制台)
- 个人作业1——四则运算题目生成程序(基于控制台)
- 个人作业1——四则运算题目生成程序(基于控制台)
- 个人作业1——四则运算题目生成程序(基于控制台)
- 个人作业1——四则运算题目生成程序(基于控制台)
- 个人作业1——四则运算题目生成程序(基于控制台)
- 个人作业1——四则运算题目生成程序(基于控制台)
- 个人作业1——四则运算题目生成程序(基于控制台)
- (修改)个人作业1——四则运算题目生成程序(基于控制台)
- 个人作业1——四则运算题目生成程序(基于控制台)
- 个人作业1——四则运算题目生成程序(基于控制台)