令牌不会在循环中正确堆叠

时间:2014-12-14 22:06:52

标签: java while-loop stack token

好的,所以我在我的Java编程课程中处理这个项目,我们必须使用Stacks从计算器文件夹中的.txt文件读取并将结果打印到新文件

确切的说明是至少创建两个类,即Driver和Calculate。 (我创建了另一个类PrioritiesAdvanced,它处理每个运算符的堆栈和输入优先级值)Calculate应该有readFile方法,它验证文件writeResults,它将解决方案写入一个新文件,push,只将操作符推送到stack如果其输入优先级值大于或等于当前堆栈的堆栈优先级,则调用函数popAndProcess,而函数popAndProcess调用数字堆栈中的2个数字,运算符顶部的运算符堆叠,并计算结果。

运算符堆栈从文件中获取字符串值,而数字堆栈通过解析文件中的标记获取双倍值。优先级值是一个将操作顺序合并到计算器中的系统,因此一旦操作员出现的操作顺序的优先级低于之前的操作顺序,就调用popAndProcess方法。

我目前的主要问题是我的push函数中的while循环应该被构造为将每个标记组织成数字或运算符堆栈,而不是正确地堆叠我的值。它只会堆叠第一个标记,并且只有它是一个数字值。我的运算符堆栈在此循环之前已经有一个值,因此我不确定它是否将每个堆栈停止在1或者大小为1。

这听起来应该是一个简单的问题要解决,但我不能为我的生活找到问题所在!我没有收到任何错误或任何错误,所以至少我知道我的代码并没有根本错误。可能。

在每个循环之后,应该将要堆叠的变量重写为下一个标记,并且应该对其进行分类并直接推送。如果有人可以帮我确定问题,或建议一种不同的方法来实现可能更好的相同结果,我们将不胜感激。如果有人认为问题可能存在于此方法中引用的其余代码中,我将提供更多信息。我也明白,这里还有一些不相关的问题,但我正在研究这些问题。

    public void push(int equationArrayIndex)
{
    StringTokenizer tokenizer=new StringTokenizer(readArray.get(equationArrayIndex));

    System.out.println(tokenizer.countTokens());
    double digitValue=0;
    String equationToken="";

    while(tokenizer.hasMoreTokens()==true)
    {
        equationToken=tokenizer.nextToken();

       //Pushes number values
        try 
        {   digitValue=Double.parseDouble(equationToken);
            numberStack.push(digitValue);   }

        //Pushes operator values
        catch (java.lang.NumberFormatException e) 
        {   

           //Stops equation if token is an invalid operator
            if(calculatorPrioritiesAdvanced.getPriorities(equationToken)==null)
            {
                killEquation=true;
                return;
            }
            else
        {

                //Stacks operator if order of operations allows
                if (calculatorPrioritiesAdvanced.getPriorities(equationToken).getInputPriorityValue()>=operatorStack.peek().getStackPriorityValue())
                {operatorStack.push(calculatorPrioritiesAdvanced.getPriorities(equationToken));}

                //Processes equation so far if operation priority is
                else{this.popAndProcess(numberStack, operatorStack);
                     }

                if (equationToken==")")
                {this.popAndProcess(numberStack,operatorStack);}
                else{}
            }       
        }
    }       
}

0 个答案:

没有答案