第四次作业

作业四 :个人项目-小学四则运算

作业要求来自https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2186

我的github远程仓库的地址:https://github.com/llllll1/ls

  1. 题目要求:

___________________________________________________________________________________________

像《构建之法》的人物阿超那样,写一个能自动生成小学四则运算题目的命令行 "软件"。

 

 

具体要求:任何编程语言都可以,命令行程序接受一个数字输入,然后输出相应数目的四则运算题目和答案。例如输入数字是 30, 那就输出 30 道题目和答案。 运算式子必须至少有两个运算符,运算数字是在 100 之内的正整数,答案不能是负数。 如:

 

23 - 3 * 4 = 11

 

二、扩展要求:

___________________________________________________________________________________________

1) 要求能出和真分数 (二分之一, 十二分之五,等)相关的练习题。

 

2) 并且要求能处理用户的输入,并判断对错,打分统计。 要求能处理用户输入的真分数, 如 1/2, 5/12 等。

 

三、设计思路:

___________________________________________________________________________________________

工具:IntelliJ IDEA 2018

 

语言:Java

 

思路:先让用户输入想要生成的题目数量,然后产生随机的符号与数字组合,进行四则运算,然后统计用户做题结果,计算出正确率

 

方法: main()方法;

 

getRandom方法:产生随机数与运算符;

 

getFuhaoJieguo()方法:用于四则的规则

 

yunsuan()方法:用于结合随机产生的符号与数字并对其进行运算

 

ZhanShi()方法:用于显示正确率

四、个人软件过程耗时估计与统计表

___________________________________________________________________________________________

PSP2.1

Personal Software Process Stages

Time Senior Student

Time

minute

Planning

计划

8

5

· Estimate

估计这个任务需要多少时间

12

30

Development

开发

90

20

· Analysis

需求分析 (包括学习新技术)

20

25

· Design Spec

生成设计文档

0

0

· Design Review

设计复审

3

6

· Coding Standard

代码规范

0

5

· Design

具体设计

10

20

· Coding

具体编码

35

35

· Code Review

代码复审

10

10

· Test

测试(自我测试,修改代码,提交修改)

15

15

Reporting

报告

9

10

·

测试报告

0

0

·

计算工作量

5

10

·

并提出过程改进计划

0

0

 

五、主要代码

___________________________________________________________________________________________

 


import java.util.Scanner;

public class Fourth
{
    private int timu=0;//题目总数
    private int zhengque=0;//做对的题目数
    private int zuixiao=0;//数字下限
    private int zuida=100;//数字上线
    private String jieguo="";
    private char fuhao[]=new char[]{'+','-','*','/'};
    private  float jieguoNumber=0;
    public static void main (String[] args)
    {
        Fourth fourth=new Fourth();
        System.out.print("请问你要生成多少题目?:");
        Scanner tiqu = new Scanner(System.in);
        int number = tiqu.nextInt();
        fourth.settimu(number);
        fourth.ZhanShi();
    }
    public void settimu(int timu) {
        this.timu = timu;
    }
    private int getRandomNumber()//产生随机
    {
        return  (int)(zuixiao+Math.random()*(zuida-zuixiao+1));
    }
    private char getRandomFuhao()//产生随机
    {
        int random=(int)(Math.random()*4);
        return fuhao[random];
    }
    private float getFuhaoJieguo(char fuhao,float x,float y)//四则运算
    {
        float jieguo=0;
        switch (fuhao){
            case '+':
                jieguo=x+y;
                break;
            case '*':
                jieguo=x*y;
                break;
            case '-':
                jieguo=x-y;
                break;
            case '/':
                jieguo=x/y;
                break;
        }
        return jieguo;
    }
    private void  yunsuan()
    {
        int number[]=new int[3];
        char []fuhao=new char[2];
        while (true)
        {
            for(int i=0;i<number.length;i++)
            {
                number[i]=getRandomNumber();
            }
            fuhao[0]=getRandomFuhao();
            fuhao[1]=getRandomFuhao();
            if(fuhao[0]=='*' || fuhao[0]=='/')//如果是乘法或者是除法就执行了
            {
                if(number[1]==0)continue;
                jieguoNumber=getFuhaoJieguo(fuhao[0],number[0],number[1]);
                if(fuhao[1]=='/' && number[2]==0)continue;
                jieguoNumber=getFuhaoJieguo(fuhao[1],jieguoNumber,number[2]);
            }else
            {
                if(fuhao[1]=='/'&& number[2]==0)continue;
                if(fuhao[0]=='-')
                {
                    jieguoNumber=getFuhaoJieguo(fuhao[1],-number[1],number[2]);
                    fuhao[0]='+';
                }
                else {
                    jieguoNumber=getFuhaoJieguo(fuhao[1],number[1],number[2]);
                }
                jieguoNumber=getFuhaoJieguo(fuhao[0],number[0],jieguoNumber);
            }
            if(jieguoNumber<0)continue;
            else break;
        }
        jieguo=number[0]+""+fuhao[0]+number[1]+fuhao[1]+number[2];
        System.out.print(jieguo+"=");// 把随机之后的数字与符号都输出
        Scanner tiqu = new Scanner(System.in);
        float age = tiqu.nextFloat();
        if(Math.abs(age-jieguoNumber)>0.01)//判断用户输入是否正确
        {
            System.out.print("你做错了,答案是:"+String.format("%.2f", jieguoNumber)+"\n");
        }else{
            System.out.print("你做对了\n");
            zhengque++;//做对了之后正确的题目数量加一
        }
    }
    public void ZhanShi()
    {
        int shengyutimu=timu;
        while (shengyutimu>0){
            shengyutimu--;
            yunsuan();
        }
        System.out.print("你回答的正确率为"+(float)zhengque/timu);//显示正确率
    }

}
Fourth

 

 

六、遇到的问题与体会

___________________________________________________________________________________________

遇到的问题:不知道如何产生随机的符号与数字并进行结合运算

 

解决方法:有上过度娘搜索问题的解决方法,可是东西不知道怎么归纳,后来选择与同学进行交流,问了几个有思路的同学,慢慢自己就摸索出来了。

 

体会:写代码的时候首先要想到自己应该如何去完成它,如何去实现它,然后才着手进行编写,而不是一边想一边写,那样等之后写到一个地方卡住了,不知道怎么写了可能就会进行不下去,当你又有另一种思路的时候,可能前面便携的代码都需要修改,就白费了。

posted @ 2018-10-15 09:51  TicTac1  阅读(142)  评论(2编辑  收藏  举报