尊重操作优先级的简单计算器



我为计算器编写了代码,但它不尊重操作的优先级。我需要更改什么?该程序不必支持()。运行它时,应输入一个数字,然后输入一个符号,然后继续读取数字和符号,直到用户输入=

public static void main(String[] args) {
 Scanner sc = new Scanner(System.in);
int a,c ;
 char sgn;
 c = sc.nextInt();
do{     
    sgn = sc.next().charAt(0); 
    if (sgn=='=') break;
    a = sc.nextInt();
 switch (sgn) {
       case '+' : c += a; break;    
       case '-' : c -= a; break;
       case '*' : c *= a; break;
       case '/' : c /= a; break;
       }
   }while(sgn!='=');
  System.out.println(c);
 }
}

如果您希望能够尊重操作的优先级,则必须等待用户完成键入完整的方程,然后才开始计算。您可以自己尝试。如果你看一个人写一个方程,在他写完完整的方程(或计算)之前,你不能开始计算。

例如,我开始写2 + 2...

现在,你可以说"嗯,这是4"

但后来我继续写 2+2*3

现在,如果你计算了"2+2=4",现在你看到"*3",你无法判断它是1+3*3还是3+1*3还是0+4*3,甚至(-96)+104*3

此外,您

缺少括号的实现,这很重要,用户希望您拥有它。

完成

此操作后,我建议您尝试使用二叉树实现,因为我发现它更直观。

这里有一个关于如何做到这一点的提示。

好的,由我自己解决

int prod = sc.nextInt();
int sum = 0;
char ops;
do {
    ops = sc.next().charAt(0);
    switch (ops) {
    case '*':
        prod *= sc.nextInt();
        break;
    case '/':
        prod /= sc.nextInt();
        break;
    case '+':
        sum += prod;
        prod = sc.nextInt();
        break;
    case '-':
        sum += prod;
        prod = -sc.nextInt();
        break;
    }
} while (ops != '=');
System.out.println(sum + prod);

最新更新