[我正在尝试通过使用扫描仪来输入字符串,然后将字符串拆分为数字和运算符,然后执行方程式,从而在Java中创建一个基本的计算器。
Scanner scanner = new Scanner(System.in);
System.out.println("Enter equation:\n");
String equation = scanner.nextLine();
for (char i = 0; i < equation.length(); i++) {
if (i == '+') {
System.out.println("add");
} else if (i == '-') {
System.out.println("minus");
} else if (i == '*') {
System.out.println("times");
} else if (i == '/') {
System.out.println("divide");
}
}
我有这种方法,可以在其中请求方程式,将其转换为字符串,然后显示运算符。但是我不知道从这里去哪里。我看过正则表达式尝试拆分它,但这似乎不可能。任何帮助都是伟大的!谢谢:)
欢迎使用SO :)shunting algorithm通常用于这种情况,以便进行更改中缀符号:1 + 3 x 2
进入reverse polish notation:132+x
。这样做是为了消除中缀符号的括号和执行运算符的顺序的歧义。然后,计算器将使用该符号作为AST来计算方程式,或者说是两个堆栈:一个带有运算符,另一个带有数字。例如:numbers:[123], operators:[+x]
从堆栈中弹出运算符和两个,然后计算:numbers:[1], operators:[+]
23x = 6
数字堆栈尚未为空,因此将6放入数字堆栈。numbers:[16], operators:[+]
重复:numbers:[], operators:[]
16+ = 7
堆栈为空,答案为7:)