好的,所以我在我的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{}
}
}
}
}