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