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