表达式求值
实验11:整数算术表达式分析程序
题目类别: B作业
关键字: 类、对象、封装、类之间的关系、字符串
内容要求:
-
编写一个Java应用程序。
-
要求实现功能如下:
(1) 从键盘输入一个表示整数四则运算的字符串,例如:32+5*2-40/3
四则运算符号:
+代表整数加法、-代表整数减法、*代表整数乘法、/代表整数除法(结果为整数)
运算数全部为正整数
表达式中没有括号
假设输入的字符串一定是符合上面规则的整数四则运算的表达式。
运算数和运算符号之间可能有个数不定(0个或多个)的空格。
(2) 程序按照四则运算符的优先级和结合性对表达式进行分析并产生输出结果。
- 运行示例:
输入:32+5*2-40/3
输出:29
本次实验比较困扰我的有两个地方,1.如何将数字与运算符分隔开,2.中缀表达式的运算;
package ddd;
import java.util.Scanner;
import java.util.Stack;
public class calculation {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
System.out.println("请输入一个算术表达式: ");
String s = input.nextLine();//因为输入有空格,所以用nextline
String[] ss = s.split("\\b");//将数字和运算符分隔开
/*去掉每个字符串中的空格,但是replace并不会替代掉原来的内容
所以得赋值给自身
*/
for(int i=0;i<ss.length;i++) {
ss[i]=ss[i].replace(" ", "");
}
/*
分别用两个栈存放数字和运算符
用for-each检查每个字符串
当该字符串为数字时,直接进数字栈
当该字符串为运算符时:
判断运算符栈里有无运算符,若无则进栈。
若有运算符则判断两个运算符的优先级大小
如果当前运算符优先级>栈顶的运算符优先级,进栈
如果当前运算符优先级<栈顶的运算符优先级,取出数字栈里的两个字符串进行计算。
*/
Stack<Integer> number = new Stack