20172305 结对编程项目-四则运算 第二周 阶段总结
结对编程的好丽友
- 20172323 王禹涵:中缀转后缀
- 20172314 方艺雯:后缀表达式的计算
- 20172305 谭鑫:中缀表达式的输出
遇到的困难和解决方案
-
问题1:括号的添加方法
-
解决方案:
(1)对于括号的添加,我在最开始通过每一个字符的扫面方式,进行逐一的判断,遇到乘除号就添加一个括号,或是替代的方式,将一个乘除符号用一个乘除符号加一半的括号就可以了,想到了String类里面的方法replace,但是注意到了那个方法是所有的都要换,这样的话就和预期的效果不一样。所以针对这个是否有改变一个的方法去问老师,老师说可以尝试去重写replace方法,通过继承的方式就可以解决,是一个很棒的想法。但是在我着手编写的过程中,发现如果你要是进行添加的话,那么还得在重写的方法里面继续使用方法进行替换一个乘除符号,这样的话还是绕不开这个replace的方法,所以此路不通,添加括号的方式也就搁浅了。- replace(CharSequence target, CharSequence replacement)
使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。
(2)在问老师的同时,老师介绍了同为String类的又一个方法subSequence,通过截取整个字符串的一小部分来,在两侧进行添加括号,再给补回来的方式进行添加。所以,在五一放假期间一直在编,通过等差数列的运算方式,我成功的编写出完整的加括号的方式,但是突然发现自己的只适用于10以内的加减乘除的方式,不适用100以内的运算,所以编出的东西全白费。(心痛,还没有留下照片......)不过,可以以这个基础进行改动就应该适用100以内的方法了。通过截取位置的随机进行判断,判断那个位置是为数字还是字符进行添加括号,这就基本形成了我自己的一个加括号的方式。
- subSequence(int beginIndex, int endIndex)
返回一个新的字符序列,它是此序列的一个子序列。
(3)但是在这种情况下,我产生添加括号的问题仍是漏洞百出,在右括号前面的是运算符,或是多了一个空字符,或是在数字中进行添加括号,麻烦特别多,而且自己的是随机和循环,不知道如何解决。所以,自己就是一点点的看代码,从每一个代码的含义进行解释,进行重新的计算,但是这样的效率特别低,有时候一个晚上硬是找不出问题。在经历了好几天这样的日子,开始找助教帮助解决,助教用调试的方法进行解决,由于自己的随机和循环,有时候还遇不到问题,解决起来特别棘手,再次特别表示感谢对于助教的帮助。通过助教的帮助,自己的问题解决了一大半,但在不断的进行输出题目的时候,仍有一个特别小的问题,而且这个问题还有时候遇不到,所以很难抓住这个,助教对此也无能为力。于是,开始寻求老师的帮助,待在老师办公室的一下午,找出了我问题的解决办法
if((String.valueOf(b.charAt(b.length()-1)).equals(" ")))
b = (String) b.subSequence(0, b.length()-1);
最后的成品--括号方法终于成型了(喜大普奔)
- replace(CharSequence target, CharSequence replacement)
-
错误结果
-
正确结果
-
问题2:式子的产生
-
解决方案:按照之前的讨论,我们的想法是进行随机数和字符的交替产生,但是那样的话,我想了半天不知道如何进行添加,所以,在开始时就PASS掉了,然后想出来数字和字符的随机循环,这样的话最后在进行一个随机数的补充就行了。然后我就进行了编写,在编写的过程中,我就行了三位数的运算、四位数的运算、最大的五位数的运算,但是在编写的过程中,我看到学长们的博客中进行着压力测试,而自己编写明显不适合,不适合后期的制作,所以就在for循环上改了点,可以出现很长很长的运算式(估计这样的话,小学生的运算快崩溃了吧!!)
关键代码
- 进行加括号的静态类
package test;
import java.util.Random;
public class Brackets
{
public static String Brackets(String stance1)
{
Random generator = new Random();
String b ="" ,c = "";
int a = 0,e ,d;
while(a <= stance1.length())
{
if(("*".equals(String.valueOf((stance1.charAt(a))))) || "÷".equals((String.valueOf((stance1.charAt(a))))))
{
if(a + 5 < stance1.length())
{
e = stance1.length() - a;
d = generator.nextInt(e - 12 ) + 9;
if(" ".equals(String.valueOf(stance1.charAt(a + d))))
{
if(("+".equals(String.valueOf(stance1.charAt(a + d - 1)))) || ("-".equals(String.valueOf(stance1.charAt(a + d -1)))) || ("*".equals(String.valueOf(stance1.charAt(a + d - 1)))) || ("÷".equals(String.valueOf(stance1.charAt(a + d - 1)))))
{
b = (String)stance1.subSequence(a + 1, a + d - 2);
if((String.valueOf(b.charAt(b.length()-1)).equals(" ")))
b = (String) b.subSequence(0, b.length()-1);
c = stance1.subSequence(0,a + 1) + " (" + b.concat(" )") + stance1.subSequence(a + d - 2,(stance1.length()));
}
else
{
b = (String)stance1.subSequence(a + 1, a + d );
if((String.valueOf(b.charAt(b.length()-1)).equals(" ")))
b = (String) b.subSequence(0, b.length()-1);
c = stance1.subSequence(0,a + 1) + " (" + b.concat(" )") + stance1.subSequence(a + d,(stance1.length()));
}
}
else
{
if(("+".equals(String.valueOf(stance1.charAt(a + d)))) || ("-".equals(String.valueOf(stance1.charAt(a + d)))) || ("*".equals(String.valueOf(stance1.charA
- 生成中缀表达式的类
package test;
import test.Character;
import java.util.Random;
public class NifixExpression extends Character
{
String result = "",res;
Random generator = new Random();
int numer,denom;
public String Level(int num,int sum)//num 等级 sum =1代表整式,sum= 2代表分式
{
if (num == 1&&sum == 1)//一级整式
{
int a = generator.nextInt(100);
int b = generator.nextInt(100);
result = a + super.character() + b + " = ";
}
else if (num != 1&&sum == 1)//多级整式
{
for (int e = 0; e < num ; e++)
{
int d = generator.nextInt(100);
result += d + super.character();
}
int f = generator.nextInt(100);
result += f + " = ";
}
else
{
if (num == 1&&sum == 2)//一级分式
{
int o = generator.nextInt(100);
int p = generator.nextInt(100);
int q = generator.nextInt(100);
int r = generator.nextInt(100);
result = RationalNumber(o, p) + super.character() + RationalNumber(q,r) + " = ";
}
else if (num != 1&&sum == 2) //多级分式
{
for(int g = 0;g < num ;g++)
{
int h = generator.nextInt(100);
int i = generator.nextInt(100);
result += RationalNumber(h,i) + super.character();
}
int j = generator.nextInt(100);
int k = generator.nextInt(100);
result += RationalNumber(j,k) + " = ";
}
}
return result;
}
public String Level(String num) {
// 单独的加法运算
if (num.equals("+")) {
int sum = generator.nextInt(5) + 1;
for (int a = 0; a < sum; a++) {
int k = generator.nextInt(100);
result += k + super.character(1);
}
int l = generator.nextInt(100);
result +=
四则运算中个人负责的部分
自己负责产生题目和添加括号的编写以及一部分的产品代码。
贡献度
方艺雯 | 王禹涵 | 谭鑫 | |
---|---|---|---|
贡献度 | 33.4% | 33.3% | 33.3% |
待办事项
结对伙伴评价
- 20172314方艺雯 负责的是后缀转为数字,也就是正确答案。感觉这部分比较难,而且是产生正确答案的关键,能够很出色的完成很厉害。
- 20172323王禹涵负责的是中缀转后缀的问题。这部分算是整个式子承前启后的部分,没有这部分,我和方艺雯的内容就全白费。
- 两位小伙伴完成的都很出色,遇到问题也不放弃,熬夜看代码,不断的在群里进行分析和探讨,和两位合作很愉快、轻松。