疯狂冗长但必要的简介: 现在,我正在写一个合成分数计算器。要做到这一点,有几个步骤(对于计算机来说)。 我已完成第一步
3x^2+2x^1+3x^0
)解析为每个词的片段(如3x^2
,2x^1
等)。3x^2 + 2x^1 + 0x^1
必须以3,2,0
形式进行。此外,如果缺少某种程度,则应添加零号。例如,如果输入为3x^2 + 2x^0
,则必须在中间添加零,因为缺少度数为1的项。输出为3,0,2
。我为解决这个问题做了什么:
如果我还没有说过这个,我用Java写作。 (请注意:我正在尝试为此创建一个MVC。要查看完整代码,请转到here)
//Cycle through all the degrees
for (int i = this.degree; i>=0; i--){
//We can set a boolean value on
//whether we have found the term in the array with the correct degree
boolean found = false;
// arr is the array with all the terms (2x^2) etc.
for (String each : arr){
//checks if the current term is of the degree we are looking for (i)
if(lookForTheTerm(each,i)){
try{
//Add it to the resulting array list
coefficients.add(getCoeffFromString(arr[i]));
}
catch (Exception e){
}
//We found it
found = true;
//Break out of the loop (if we found it, we don't need to keep looking)
break;
}
}
//If we didn't find it, add a 0 to the array list
if(!found){
coefficients.add((float) 0);
}
}
//Not shown: After iterating, reverse the list to be correct
问题:
如果所有条款都存在,则此代码有效。含义3x^2+1x^1+0x^0
(有一个2,1度和0的项)。
如果它们出现故障,它会完全疯狂。
如果缺少一个并且它们按顺序排列,它会放入零,但忽略了主导词。
代码有什么问题?我几乎肯定这是一个语义错误。我再一次尝试提供MVC。但如果还不够,可以看到完整的代码here.
感谢先进的帮助
答案 0 :(得分:0)
问题1:订购
您正在解析第一学期的学位,然后使用学位来循环学习这些学位。如果你把第二学位放在首位,那么它只会处理2个学期。
您可以先通过学位排序您的学期来解决此问题。
问题2:更少的条款
这是由程度相关的问题引起的,但更糟糕的是:
coefficients.add(getCoeffFromString(arr[i]));
}
catch (Exception e){
}
你正在吃这个例外。如果你有2个术语,但是一个有3个学位,那么在索引i处取消引用列表就会抛出一个超出范围的异常。