搜索到的写的似乎有点复杂
题目
-
编写一个Java应用程序。
-
要求实现功能如下:
(1) 从键盘输入一个表示整数四则运算的字符串,例如:32+5*2-40/3
四则运算符号:
+代表整数加法、-代表整数减法、*代表整数乘法、/代表整数除法(结果为整数)
运算数全部为正整数
表达式中没有括号
(2) 程序按照四则运算符的优先级和结合性对表达式进行分析并产生输出结果。
- 运行示例:
输入:32+5*2-40/3
输出:29
- 程序设计要求使用面向对象方法编写。
解答
import java.util.Stack;
public class calculate {
int calculating(String s) {
Stack<Integer> stack =new Stack<Integer>(); //栈
int num=0; //计算数
char sign ='+';
for (int i = 0; i < s.length(); i++) {
char c=s.charAt(i);
if(c>='0'&&c<='9') { //如果当前字符是数字,就用一个num累加(因为num可能是两位数或者以上);
num=num*10+c-'0'; //计算数,
}
if(c<'0'||c>'9'||i==s.length()-1) {
//判断当前当前字符是不是运算符(除了空格和数字都是运算符)或者当前字符是不是最后一个字符,如果是的话就要结算入栈;
switch (sign) {
case '+':
stack.push(num);
break;
case '-':
stack.push(-num);
break;
case '*':
stack.push(stack.pop() * num);
break;
case '/':
stack.push(stack.pop() / num);
break;
}
sign=c;
num=0;
}
}
int res = 0;
while (!stack.isEmpty())
res += stack.pop();
return res;
}
}
import java.util.*;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
calculate cal=new calculate();
Scanner input =new Scanner(System.in);
String s=input.next();
int res=cal.calculating(s);
System.out.println(res);
input.close();
}
}