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

时间:2014-12-13 11:47:39

标签: java calculator

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

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 个答案:

答案 0 :(得分:1)

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

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

现在,你可以说“嗯,这是4”

然后我继续写2 + 2 * 3

现在,如果您计算出“2 + 2 = 4”并且现在看到“* 3”,则无法判断它是1 + 3 * 3还是3 + 1 * 3或0 + 4 * 3,甚至(-96)+ 104 * 3

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

完成后,我建议您尝试使用Binary Trees进行实施,因为我发现它更直观。

以下是关于如何操作的hint

答案 1 :(得分:0)

好的,我自己解决了

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);