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解决方案:暂时还没解决该问题,需要看看视频研究一下。
文件扩展(加分项)
- 现只能写入文件,下周改进。