gpt4 book ai didi

Java Postfix 表达式计算器

转载 作者:行者123 更新时间:2023-12-01 09:59:23 24 4
gpt4 key购买 nike

我真的需要有关修复后表达式计算器的帮助。我真的不知道我编写的代码有什么问题,但是当我运行该程序时,它只是打印顶部的数字。例如,如果我输入“7 2 +”,则输出为 2。如果我输入“2 7 +”,则输出为 7。有人可以指出我如何解决此问题的正确方向吗?我认为(不确定)问题是我的程序无法正确检测操作数“+”和“*”。但是,我也说不出为什么。

文件#1:

import java.io.*;
import java.util.*;

public class ProblemTwo {

public static void main(String[] args) {

Scanner scan = new Scanner(System.in);
System.out.println("Enter a post value expression: ");
String input = scan.nextLine();
StringTokenizer st = new StringTokenizer(input);
Stack hello = new Stack(st.countTokens());

for (int i = 0; i <= st.countTokens(); i++) {
String inputToken = st.nextToken();
if (inputToken.trim().contains("+")) {
int sum = Integer.parseInt(hello.pop() + Integer.parseInt(hello.pop()));
System.out.println(sum);
hello.push(Integer.toString(sum));
}
else if (inputToken.trim().contains("*")){
int product = Integer.parseInt(hello.pop()) * Integer.parseInt(hello.pop());
hello.push(Integer.toString(product));
}
else {
hello.push(inputToken);
}
}
System.out.println(hello.pop());
}
}

文件#2:

public class Stack {

private String[] stackArray;
private int arraySize;
private int top;

public Stack(int capacity) {
arraySize = capacity;
stackArray = new String[arraySize];
top = -1;
}

public void push(String i) {
stackArray[++top] = i;
}

public String pop() {
return stackArray[top--];
}

public boolean isEmpty() {
return top == -1;
}

public boolean isFull() {
return top == arraySize - 1;
}
}

最佳答案

问题是您在 for 循环中使用 st.countTokens() 但每次后续调用 countTokens() 都会返回计数可以调用此分词器的 nextToken 方法的次数。来自 StringTokenizer的文档:

Calculates the number of times that this tokenizer's nextToken method can be called before it generates an exception. The current position is not advanced.

在开始循环之前使用另一个变量捕获st.countTokens(),或者更好地使用st.hasMoreTokens()来终止循环。喜欢:

while (st.hasMoreElements()) {
// same logic
}

同时修改 pop() 方法以返回 stackArray[top--];

关于Java Postfix 表达式计算器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36938205/

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