本次作业要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2166
github远程仓库的地址:https://github.com/lirou1/git
一、题目要求:
任何编程语言都可以,命令行程序接受一个数字输入,然后输出相应数目的四则运算题目和答案。例如输入数字是 30, 那就输出 30 道题目和答案。 运算式子必须至少有两个运算符,运算数字是在 100 之内的正整数,答案不能是负数。
1) 要求能出和真分数 (二分之一, 十二分之五,等)相关的练习题。
2) 并且要求能处理用户的输入,并判断对错,打分统计。 要求能处理用户输入的真分数, 如 1/2, 5/12 等。
二、个人软件过程耗时估计与统计表
PSP2.1 | Personal Software Process Stages | Time Senior Student | Time |
Planning | 计划 | 3 | 4 |
· Estimate | 估计这个任务需要多少时间 | 30 | 38 |
Development | 开发 | 10 | 15 |
· Analysis | 需求分析 (包括学习新技术) | 3 | 4 |
· Design Review | 设计复审 | 4 | 5 |
· Coding Standard | 代码规范 | 2 | 3 |
· Design | 具体设计 | 10 | 12 |
· Coding | 具体编码 | 15 | 21 |
· Code Review | 代码复审 | 7 | 9 |
· Test | 测试(自我测试,修改代码,提交修改) | 3 | 5 |
三、代码提交
自定义变量
public static void main(String[] args){ int number,answer,mol,z;//题目数量,答案,分子,用户输入的整数答案, int a,b,c,m,n;//a,b为分子,c为运算符,m,n为分母 int h = 0;//答对题数 System.out.printf("请输入需要生成的题目数量:"); Scanner d = new Scanner(System.in); number = d.nextInt();//题目数量 for(int i = 0 ; i < number ; i++){ Random a1 = new Random();//生成随机数 Random b1 = new Random(); Random c1 = new Random(); Random m1 = new Random(); Random n1 = new Random(); a = a1.nextInt(100);//随机数范围0-100 b = b1.nextInt(100); c = c1.nextInt(4);//0为+,1为-,2为*,3为/ m = m1.nextInt(100); n = n1.nextInt(100);
加法的部分运算
if(c==0){//0为+ if(m==0&&n==0){ m = m1.nextInt(100)+1;//分母不能为0 n = n1.nextInt(100)+1; if(a%m==0&&b%n==0){//整数 answer = a + b; System.out.printf(a+"+"+b+"= "); Scanner user = new Scanner(System.in);//获取输入的答案 z = user.nextInt(); if(z==answer){ System.out.println("回答正确!"); h++; }else{ System.out.println("回答错误!正确答案是"+answer); } }else if(a%m==0&&b%n!=0){//分数处理 String x = b + "/" + n;//存分数 mol = a*n + b ;//计算分子 System.out.printf(a+"+"+x+"= "); String y = mol + "/"+ n;//存分数计算结果 Scanner user = new Scanner(System.in); String score = user.next();//用户输入的分数答案 if(score.equals(y)){ System.out.println("回答正确!"); h++; }else{ System.out.println("回答错误!正确答案是"+y); } }
减法的部分运算
if(c==1){//1为- if(m==0&&n==0){ m = m1.nextInt(100)+1; n = n1.nextInt(100)+1; if(a%m==0&&b%n==0){ answer = a - b; System.out.printf(a+"-"+b+"= "); Scanner user = new Scanner(System.in); z = user.nextInt(); if(z==answer){ System.out.println("回答正确!"); h++; }else{ System.out.println("回答错误!正确答案是"+answer); } }else if(a%m==0&&b%n!=0){ String x = b + "/" + n; mol = a*n - b ; System.out.printf(a+"-"+x+"= "); String y = mol + "/"+ n; Scanner user = new Scanner(System.in); String score = user.next(); if(score.equals(y)){ System.out.println("回答正确!"); h++; }else{ System.out.println("回答错误!正确答案是"+y); } }else if(a%m!=0&&b%n==0){
乘法的部分运算
if(c==2){ if(m==0&&n==0){ m = m1.nextInt(100)+1; n = n1.nextInt(100)+1; if(a%m==0&&b%n==0){ answer = a * b; System.out.printf(a+"x"+b+"= "); Scanner user = new Scanner(System.in); z = user.nextInt(); if(z==answer){ System.out.println("回答正确!"); h++; }else{ System.out.println("回答错误!正确答案是"+answer); } }else if(a%m==0&&b%n!=0){ String x = b + "/" + n; mol = a*b ; System.out.printf(a+"x"+x+"= "); String y = mol + "/"+ n; Scanner user = new Scanner(System.in); String score = user.next(); if(score.equals(y)){ System.out.println("回答正确!"); h++; }else{ System.out.println("回答错误!正确答案是"+y); } }else if(a%m!=0&&b%n==0){
除法的部分运算
if(c==3){ if(b==0){ b = b1.nextInt(100)+1; if(m==0&&n==0){ m = m1.nextInt(100)+1; n = n1.nextInt(100)+1; if(a%m==0&&b%n==0){ if(a%b!=0){ String x=a+"/"+b; System.out.printf(a+"÷"+b+"= "); Scanner user = new Scanner(System.in); String score = user.next(); if(score.equals(x)){ System.out.println("回答正确!"); h++; }else{ System.out.println("回答错误!正确答案是"+x); } }else{ answer = a / b; System.out.printf(a+"÷"+b+"= "); Scanner user = new Scanner(System.in); z = user.nextInt(); if(z == answer){ System.out.println("回答正确!"); h++; }else{ System.out.println("回答错误!正确答案是"+answer); } } }else if(a%m==0&&b%n!=0){
具体代码已提交至github上
四、需求分析
用户输入生成题目的个数,并能够自动随机生成100以内的加减乘除四则运算,运算包括整数和分数的运算,答完题后判断对错并输出正确答案,并在最后能统计答对的题数与正确率。
五、构思设计
整个设计都是main函数里面实施的,以多重判断的语句来实现整数跟分数的运算,用到的环境是idea
六、遇到的问题与解决
分数跟整数的判断,特别是在除法运算立马所要做的判断以及计算是最复杂的,要思路非常清晰才可以,这部分有去问同学。这次的程序耗时很大,原因是自己的基础不足,今后应该多看看基础知识,多积累经验,多向有经验的同学请教也是有用的,希望可以把专业学好。