• 20172332『Java程序设计』课程结对编程练习_四则运算第二周阶段总结


    20172313『Java程序设计』课程结对编程练习_四则运算第二周阶段总结

    小组成员

    • 20172326康皓越
    • 20172313余坤澎
    • 20172332于欣月

    小组编程照片

    设计思路

    • 设计一个生成符号类
      • 包括加减乘除和括号
    • 设计一个数类
      • 包括整数和分数
    • 设计一个表达式类
      • 需要调用符号类和数类。
    • 设计一个运算类
      • 对生成的表达式进行处理,
      • 然后使之转换成后缀表达式,
      • 进而计算出后缀表达式的值。
      • 添加判断对错和正确率的方法。
    • 在后续的扩展中设计一个文本处理类
      • 实现将生成题目写入文件中
      • 从文件中读取题目并计算和判题。

    重要代码及代码解释

    • 1.数类中的

        private int gcd(int num1,int num2)
        {
        while (num1 !=num2) {
            if (num1 > num2)
                num1 = num1 - num2;
            else
                num2 = num2 - num1;
        }
        
        return num1;
        }
        private void reduce()
        {
            if (numerator !=0)
            {
            int common = gcd(Math.abs(numerator),denominator);
            
            numerator = numerator/common;
            denominator = denominator/common;
            }
        }
      

    这两个方法使我们生成的分数进行了约分。

    • 2.生成表达式类中

                //先做出括号并且做出括号里的内容
                String kuohao = "";
                int ge = a.nextInt(2) + 2;
                Elements c = new Elements();
                c.khq();
                kuohao += c;
                for (int i = 0; i <= ge; i++) {
                    Num b = new Num();
                    b.getNum();
                    kuohao += b.toString();
                    int el = a.nextInt(2);
                    if (el == 0) {
                        c.add();
                        kuohao += c;
                    } else {
                        c.sub();
                        kuohao += c;
                    }
                }
                Num e = new Num();
                e.getNum();
                c.khh();
                kuohao += e.toString() + c;
      

    先把括号以及括号内的内容创建出来,然后再用随机数去判断括号发在表达式中的位置。

    • 3.生成表达式类中的

                //分别判断是否有无加减或乘除,并进行相应的随机添加加减或者乘除法,以保证达到混合运算的目的。
                Elements p = new Elements();
                Num w = new Num();
                w.getNum();
                if (count1 != 0 && count2 != 0)
                    result = result;
                else if (count1 == 0) {
                    Random m = new Random();
                    int n = m.nextInt(2);
                    //选择加还是减
                    if (n == 0) {
                        p.add();
                        result += p + w.toString();
                    } else {
                        p.sub();
                        result += p + w.toString();
                    }
                } else {
                    Random m = new Random();
                    int n = m.nextInt(2);
                    //选择乘还是除
                    if (n == 0) {
                        p.mul();
                        result += p + w.toString();
                    } else {
                        p.div();
                        result += p + w.toString();
                    }
                }
      

    因为等级三中无括号的是混合运算,加减其中之一和乘除其中之一必须有,为了防止表达式生成的不符合要求,所以做出了以上代码,判断是否存在加减或乘除,不存在就加上相应所缺的。

    • 4.生成表达式类中的等级三有括号的时候

                     //分别判断是否有乘除,并进行相应的乘除法添加,以保证达到混合运算的目的。
                    Elements p = new Elements();
                    Num w = new Num();
                    w.getNum();
                    if (count2 == 0) {
                        Random m = new Random();
                        int n = m.nextInt(2);
                        if (n == 0) {
                            p.mul();
                            result += p + w.toString();
                        } else {
                            p.div();
                            result += p + w.toString();
                        }
                    } else
                        result = result;
                }
      

    因为括号中就包含了加减,所以只需要判断乘除存不存在的情况

    • 5.计算类中判断正确的方法中

        if (result2 - doCal(list) < 0.001 && result2 - doCal(list) > -0.001)
      

    因为IEEE754浮点数的原因,所以可能正确答案与用户所属的正确答案有所差异,所以规定了精确度内,就认为相等。

    项目链接

    码云地址

    小组结对博客

    代码贡献度

    余坤澎 于欣月 康皓越
    个人贡献度 30% 40% 30%

    遇到的困难及解决方法

    • 困难1:刚开始创建的数类没有约分的方法,所以出现的数了可以约分的数。
    • 困难1解决方案1:书中例题之前有一个分数的类,其中就包含了约分的方法。
    • 困难2:刚开始我们是一个数必定带一个符号,但是发现括号不好加。
    • 困难2解决方案:把数和符号分开,并且先做出括号内容,再把括号加入表达式中。
    • 困难3:计算类中乘除类得出的结果不正确。
    • 困难3解决方案:暂时还没解决该问题,还需一定时间。
    • 困难4:文件处理,如今只能写入文件,还差从文件中读入。
    • 困难4解决方案:暂时还没解决该问题,需要看看视频研究一下。

    文件扩展(加分项)

    • 现只能写入文件,下周改进。
  • 相关阅读:
    Java实现 蓝桥杯VIP 基础练习 回形取数
    Java实现 蓝桥杯VIP 基础练习 回形取数
    Java实现 蓝桥杯VIP 基础练习 回形取数
    Java实现 蓝桥杯VIP 基础练习 回形取数
    Java实现 蓝桥杯VIP 基础练习 报时助手
    Java实现 蓝桥杯VIP 基础练习 报时助手
    Java实现 蓝桥杯VIP 基础练习 报时助手
    Java实现 蓝桥杯VIP 基础练习 报时助手
    Java实现 蓝桥杯VIP 基础练习 报时助手
    block的是发送信号的线程,又不是处理槽函数的线程
  • 原文地址:https://www.cnblogs.com/yu757503836/p/9011486.html
Copyright © 2020-2023  润新知