使用插入解析java的因子列表

时间:2015-12-17 00:24:40

标签: java math

疯狂冗长但必要的简介: 现在,我正在写一个合成分数计算器。要做到这一点,有几个步骤(对于计算机来说)。 我已完成第一步

  1. 输入必须(假设为3x^2+2x^1+3x^0)解析为每个词的片段(如3x^22x^1等)。
  2. 接下来,必须将每个因子添加到具有度数元素的数组或数组列表中。如果您熟悉合成分部,您知道这些因素必须与它们匹配的程度顺序排列(3x^2 + 2x^1 + 0x^1必须以3,2,0形式进行。此外,如果缺少某种程度,则应添加零号。例如,如果输入为3x^2 + 2x^0,则必须在中间添加零,因为缺少度数为1的项。输出为3,0,2
  3. 我为解决这个问题做了什么:

    如果我还没有说过这个,我用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.

    感谢先进的帮助

1 个答案:

答案 0 :(得分:0)

问题1:订购

您正在解析第一学期的学位,然后使用学位来循环学习这些学位。如果你把第二学位放在首位,那么它只会处理2个学期。

您可以先通过学位排序您的学期来解决此问题。

问题2:更少的条款

这是由程度相关的问题引起的,但更糟糕的是:

coefficients.add(getCoeffFromString(arr[i]));
            }
            catch (Exception e){

            }

你正在吃这个例外。如果你有2个术语,但是一个有3个学位,那么在索引i处取消引用列表就会抛出一个超出范围的异常。