gpt4 book ai didi

java - 我无法让我的 PostFix Evaluator 正常工作

转载 作者:行者123 更新时间:2023-11-29 05:27:24 25 4
gpt4 key购买 nike

我不知道我应该在这里做什么,但我认为我的大部分代码都很好。我只能在 Evaluate() 方法中编辑代码。请帮忙。

这是我的主要方法的类

package labs.lab3;

import java.util.Scanner; // Needed for the Scanner
import java.io.*; // Needed for the File and IOException

public class TestDriver {

/**
* @param args
*/
public static void main(String[] args) throws IOException {
System.out.printf("%-30s", "Postfix Expression");
System.out.printf("%-30s", "Evaluation Result");
System.out.println();
String filename = "./src/labs/lab3/PostfixExpressions.txt";

File file = new File(filename);
Scanner inputFile = new Scanner(file);

while (inputFile.hasNext())
{

String expression = inputFile.nextLine();
System.out.printf("%-30s", expression);
PostfixEvaluator evaluator = new PostfixEvaluator(expression);
System.out.printf("%-30s" , evaluator.Evaluate());
System.out.println();
}

inputFile.close();
}

}

这是我的 Post Fix Evaluator 类:

package labs.lab3;

import java.util.Stack;
import java.util.EmptyStackException;
import java.util.StringTokenizer;

public class PostfixEvaluator
{
private Stack<Integer> stack;
private String expression;
private String token;

public PostfixEvaluator(String e)
{
stack = new Stack<Integer>();
expression = e;
}

// Evaluate the postfix expression and return the evaluation result
public int Evaluate()
{
int op1,op2;
int result;
StringTokenizer st = new StringTokenizer(expression);//split the expression into tokens
String token=st.nextToken();

while (st.hasMoreTokens()){

if (Character.isDigit(token.charAt(0))) {
int value = Integer.parseInt(token);
stack.push(value);
}

else if (!Character.isDigit(token.charAt(0))) {
op1=stack.pop();
op2=stack.pop();
result = Calculate(op1,op2,token.charAt(0));
stack.push(result);

}

}
int answer = stack.pop();
return answer;








}

// Perform an operation on the two operands
public int Calculate(int operand1, int operand2, char operation)
{
int result = 0;

switch (operation)
{
case '+':
result = operand1 + operand2;
break;
case '-':
result = operand1 - operand2;
break;
case '/':
result = operand1 / operand2;
break;
case '*':
result = operand1 * operand2;
break;
case '%':
result = operand1 % operand2;
break;
}
return result;
}
}

谢谢

最佳答案

我看不到你在分词器中前进。您只需调用 nextToken一次,在循环之外。其余代码似乎表明评估应该消耗整个表达式,所以需要在里面调用nextToken循环。

关于java - 我无法让我的 PostFix Evaluator 正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22215797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com