好的,所以我必须从文件中读入后缀表达式。后缀表达式必须有空格来分隔每个运算符或操作数。到目前为止,我所拥有的只有在输入文件中的运算符或操作数之间没有空格时才有效。 (即如果文件有 12+,我得到的结果是 3。)为了做到这一点,我认为我需要标记输入,但我不确定如何。这是我到目前为止所拥有的。感谢您的任何回复。
import java.util.*;
import java.io.*;
public class PostfixCalc{
public static void main (String [] args) throws Exception {
File file = new File("in.txt");
Scanner sc = new Scanner(file);
String input = sc.next();
Stack<Integer> calc = new Stack<Integer>();
while(sc.hasNext()){
for(int i = 0; i < input.length(); i++){
char c = input.charAt(i);
int x = 0;
int y = 0;
int r = 0;
if(Character.isDigit(c)){
int t = Character.getNumericValue(c);
calc.push(t);
}
else if(c == '+'){
x = calc.pop();
y = calc.pop();
r = x+y;
calc.push(r);
}
else if(c == '-'){
x = calc.pop();
y = calc.pop();
r = x-y;
calc.push(r);
}
else if(c == '*'){
x = calc.pop();
y = calc.pop();
r = x*y;
calc.push(r);
}
else if(c == '/'){
x = calc.pop();
y = calc.pop();
r = x/y;
calc.push(r);
}
}
}
int a = calc.pop();
System.out.println(a);
}
}
最佳答案
有几处需要更改,您可以逐步完成。
- 声明您的
Stack
以包含Integer
而不是Character
。 - 在读取输入的代码中,依赖于
String
而不是Character
。 - 使用
Integer.parseInt()
解析操作数。这会将String
转换为Integer
。 (实际上,它将它们转换为int
,但在您的情况下,这种差异并不重要。) - 使用
Scanner.useDelimiter()
将扫描器定界符设置为\s+
,这将匹配任意空白字符的序列。
当然还有无数其他方法可以处理您的输入,但我试图让您了解如何更改现有代码以执行它需要执行的操作。
关于java - 后缀计算器 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12269191/