java - 后缀计算器 Java

标签 java calculator postfix-notation stack

好的,所以我必须从文件中读入后缀表达式。后缀表达式必须有空格来分隔每个运算符或操作数。到目前为止,我所拥有的只有在输入文件中的运算符或操作数之间没有空格时才有效。 (即如果文件有 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);
 }
 } 

最佳答案

有几处需要更改,您可以逐步完成。

  1. 声明您的 Stack 以包含 Integer 而不是 Character
  2. 在读取输入的代码中,依赖于 String 而不是 Character
  3. 使用 Integer.parseInt() 解析操作数。这会将 String 转换为 Integer。 (实际上,它将它们转换为 int,但在您的情况下,这种差异并不重要。)
  4. 使用 Scanner.useDelimiter() 将扫描器定界符设置为 \s+,这将匹配任意空白字符的序列。

当然还有无数其他方法可以处理您的输入,但我试图让您了解如何更改现有代码以执行它需要执行的操作。

关于java - 后缀计算器 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12269191/

相关文章:

java - 困难的未经检查的类型转换警告

java - Java 新手。按任意按钮时计算器程序出现奇怪的错误

c - 编译我的 C 程序时发出警告(字符格式,不同类型的 arg)

java - 将 xml 解析为 DOM 时保留换行符的十进制值

java - 记事本到HashMap-Java

java - 不确定是否使用两个变量执行计算

c++ - 如何从将波兰表示法转换为反向波兰表示法的递归函数返回指针?

c - C 中的后缀评估

Java Spring 计划作业不起作用

c# 如何让 keydown 和 button click 做同样的事情?