java - 如何正确编写 evaluatePostfix 函数?
问题描述
我是编码新手。试图用 Java 编写一个 evaluatePostfix 函数。我不断收到错误消息:
不兼容的类型:int 不能转换为 Character stack.push(eval(token, a, b));
这是用于将中缀符号转换为后缀的学校作业。
以下是我的代码块:
private static int evalPostfix(String postfix){
char token = ' ';
int a;
int b;
Queue<Character> postfixQ = new Queue<>();
for (char i : postfix.toCharArray()) {
postfixQ.enqueue(i);
}
Stack<Character> stack = new Stack<>();
while (!postfixQ.isEmpty()){
token = postfixQ.dequeue();
if (isOperand(token)){
stack.push(token);
}
else {
a = stack.pop();
b = stack.pop();
stack.push(eval(token, a, b));
}
}
if(!stack.isEmpty()){
return stack.pop();
}
else {
System.out.println("Invalid postfix expression");
}
}
函数接受后缀表达式并计算结果。
这是我的评估功能:
private static int eval(char op, int a, int b){
int result = -1;
if (op == '+'){
return a + b;
}
else if (op == '-'){
return a - b;
}
else if (op == '*'){
return a * b;
}
else if (op == '/'){
return a / b;
}
else if (op == '^')
return (int)Math.pow(a, b);
return result;
}
解决方案
问题是该方法eval
返回一个int
,而您尝试将结果推送到一个Stack<Character>
.
我不完全确定您在这里尝试做什么,但这无法编译,因为int
无法直接转换为Character
.
您可以通过插入显式转换来解决编译问题char
stack.push((char)eval(token, a, b));
但这会将 的结果转换为eval
范围内的值char
,这可能不是您想要对很容易超出[0..65535] 范围的值执行的char
操作。
推荐阅读
- python - 在 python 中的 matplotlib 中绘制特定格式的时间戳
- javascript - 获取值等于某物的对象的键名
- powershell - PowerShell WebClient.DownloadFile() 在下载几秒钟后停止
- react-native - backgroundColor 在 react-native-elements 的 Input 中隐藏 clearButtonMode 的 X
- javascript - 如何将循环 id 保存到 qrcode 中?
- sql-server - 数据库的符号链接/别名
- reactjs - 使用钩子更改 Redux 状态时,React Native 模式不会更新
- python - 为什么我不能测试 python datetime moudle
- lilypond - 将八度标记拉伸到测量结束
- python - curl cmd 命令返回内部服务器错误