结对编程——四则运算(第一周)
需求分析
题目要求
一个命令行程序实现:
- 自动生成小学四则运算题目(加、减、乘、除)
- 支持整数
- 支持多运算符(比如生成包含100个运算符的题目)
- 支持真分数
- 统计正确率
需求理解
- 输入:需要计算的式子数、计算结果
输出:判断后的答案(true/false) - 满足真分数的运算如:1/3 + 1/4 = 7/12
- 处理的运算符为 +, −, ×, ÷
- 能处理用户的输入,并判断对错,统计正确率。
设计思路
- 自动生成四则运算,需要用到随机数,用随机数随机生成数字,以及随机生成0,1,2,3分别代表加减乘除符号以switch语句进行分类
- 特殊情况主要有除数不能为0,假如除数为0,则再产生一个随机数,利用while循环;
- 用count统计做对的条数,与总数相除作为正确率
实现过程中的关键代码解释
import java.util.Scanner;
public class question {
public static void main(String[] args)
{
int k;
int total,answer=0;
int answer2;
int count=0;
System.out.println("请输入你需要练习的题目数:");
Scanner input=new Scanner(System.in
);
total=input.nextInt();
question question=new question();
for(int n=0;n<total;n++)
{
int i=(int)(Math.random()*100);
int j=(int)(Math.random()*100);
switch((int)(Math.random()*4))
{
case 0:
System.out.println(i+"+"+j+"=");
answer=i+j;
break;
case 1:
if(i<j)
{
int temp=i;
i=j;
j=temp;
}
System.out.println(i+"-"+j+"=");
answer=i-j;
break;
case 2:
System.out.println(i+"*"+j+"=");
answer=i*j;
break;
case 3:
while(j==0)
j= (int)(Math.random()*100);
System.out.println(i+"/"+j+"=");
answer=i/j;
break;
}
Scanner input2=new Scanner(System.in
);
answer2=input2.nextInt();
if(answer2==answer){
System.out.println("正确!");
count++;
}
else{
System.out.println("错误!");
}
}
float cent=(float)count/(float)total;
System.out.println("正确率为"+cent);
}
}
运行过程截图
代码托管地址
遇到的困难及解决方法
- 困难1:如何高效的将一个输入的值转化为可用数字?
- 解决方法1:对于为0的除数,利用while循环控制,进行排0输出。
- 困难2:选用何种方法对运算符进行随机处理?
- 解决方法2:随机生成0,1,2,3,以数字分类代替运算符分类。
PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
· Test | · 测试(自我测试,修改代码,提交修改) | 20min | 25min |
Planning | 计划 | 15min | 10min |
· Estimate | · 估计这个任务需要多少时间 | 240min | 260min |
Development | 开发 | 40min | 35min |
· Analysis | · 需求分析 (包括学习新技术) | 15min | 35min |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 10min | 15min |
· Coding | · 具体编码 | 2h | 100min |
· Code Review | · 代码复审 | 30min | 40min |