zoukankan      html  css  js  c++  java
  • 四则运算练习软件

    源码可直接克隆的仓库地址 https://git.coding.net/OlinaChenry/Four.git

     

    1. 需求分析

    • 支持整数的四则运算
    • 支持多运算符
    • 支持真分数(附加要求)
    • 将学号与生成的练习题及其答案输出到文件“result.txt”中

    2. 功能设计

      基本功能

    •   能随机生成n道加减乘除练习题,并给出答案

      扩展功能

    •   每道题目中出现的运算符个数不超过3个
    •   不得出现负数与非整数
    •   没有重复题目
    •   能支持真分数的出题与运算

    3. 设计实现

    定义了一个主函数,生成文件;

    式子类,生成带括号的式子;

    分数相关类   ,进行分数的生成

    (类的关系:主类调用另外两个类,式子类调用第三个类)

    在式子类中,使用panduan方法,判断优先级并生成带括号的式子;

      在该类中定义了两个实例方法:

    • 第一个是将数列表和符号列表组合成式子的方法
    • 第二个是计算该式子结果的方法

    在分数相关类中,定义了随机生成若干个分数和算符组合起来的构造方法;

    最后一个类是主类,对文件的操作都放在主类中进行


     

    4. 算法详解

    • 优先级的判断

    在实现带括号的运算时,我使用了内部类panduan()来判断符号的优先级,以生成合法的式子。

     if (panduan(charArr) < panduan(charArr2))// 优先级判断
                        {
                            if (charArr2 == '÷') {
                                if (b0 == 0)
                                    b0++;
                                while (sum % b0 != 0)// 如果不能整除 重新生成随机数
                                {
                                    b0 = rand.nextInt(99) + 1;
                                }
                                sum = sum / b0;// 计算
                            }
                            if (charArr2 == '*')
                                sum = sum * b0;
                            brr = "(" + brr + ")" + "" + charArr2 + "" + b0;// 满足条件 生成括号
                        } 
    

    5. 测试运行

     


    6.代码展示

    • 生成文件
    public static void main(String[] args) {
            // TODO Auto-generated method stub
            // Scanner input = new Scanner(System.in);
            int n = 0;
            int flag = 1;
            // n=Integer.parseInt(args[0]);
            try {
                n = Integer.parseInt(args[0]);// 命令行输入
                if (file.exists()) { //如果文件已存在,则删除文件
                    file.delete();
                }
                if(n>1000||n<1){
                    System.out.println("对不起,只允许输入1-1000的数字!");
                    return; //结束运行
                }
            }catch (NumberFormatException e){ //输入非数字字符等
                System.out.println("对不起,只允许输入1-1000的数字!");
                return; //结束运行
            }
            try {
                PrintStream ps = new PrintStream("../result.txt");// 生成文件
                System.setOut(ps);
            } catch (Exception e) {
                System.out.println("文件生成错误");// 提示
            }
    
    •  生成式子(这里只展示除法)
     if (charArr == '÷') {
                        if (a1 == 0)
                            a1++;
                        while (a0 % a1 != 0)// 为了保证整除
                        {
                            a0 = rand.nextInt(100);
                            a1 = rand.nextInt(99) + 1;// 为了保证不出现0
                        }
                        sum = a0 / a1;
                    }
    
    if (panduan(charArr) < panduan(charArr2))// 优先级判断
                        {
                            if (charArr2 == '÷') {
                                if (b0 == 0)
                                    b0++;
                                while (sum % b0 != 0)// 如果不能整除 重新生成随机数
                                {
                                    b0 = rand.nextInt(99) + 1;
                                }
                                sum = sum / b0;// 计算
                            }
    

     

    7.总结

    这次作业共用了四天时间来完成,这个过程是痛苦的,因为基础比较差很多东西都是慢慢的学下来才能做,过程中有些细节导致程序出bug,后面调bug的时间也用了非常长的时间。

    然后说说此次作业遇到的一些坑,

    一个是文件的写入操作,如果没有使用flush,写入操作是不会进行的,感觉当初学习java时没有太深入得去理解,总是觉得flush和close绑定起来用,没有去注意它主要的作用是什么,

    然后是对列表的操作,由于在计算结果的算法中,需要对列表中的值进行添加和删除,会造成列表的下标和长度发生变动,一不注意就容易出现数组越界的异常。

    还有git上传文件,惭愧到上交作业的最后一天也还没有搞明白......后续会继续钻研,不过还是希望老师下节课能够演示一遍......


    8.PSP展示

  • 相关阅读:
    idea打开项目,没有项目文件,文件报红
    使用lombok自动生成链式调用
    gson常用的方式
    LOADING Redis is loading the dataset in memory Redis javaAPI实例
    redis.clients.jedis.exceptions.JedisDataException :READONLY You can't write
    Redis安装步骤
    springboot+jpa+mysql+redis+swagger整合步骤
    springboot+jpa+mysql+swagger2.0整合
    Daily Scrum 10.23
    Daily Scrum 10.22
  • 原文地址:https://www.cnblogs.com/chengl062/p/8641914.html
Copyright © 2011-2022 走看看