结对编程——四则运算(第一周)

结对编程——四则运算(第一周)

需求分析

题目要求

一个命令行程序实现:

  • 自动生成小学四则运算题目(加、减、乘、除)
  • 支持整数
  • 支持多运算符(比如生成包含100个运算符的题目)
  • 支持真分数
  • 统计正确率

需求理解

  1. 输入:需要计算的式子数、计算结果

    输出:判断后的答案(true/false)
  2. 满足真分数的运算如:1/3 + 1/4 = 7/12
  3. 处理的运算符为 +, −, ×, ÷
  4. 能处理用户的输入,并判断对错,统计正确率。

设计思路

  • 自动生成四则运算,需要用到随机数,用随机数随机生成数字,以及随机生成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
原文地址:https://www.cnblogs.com/akashi/p/8850258.html