Basic Calculator
题目:
实现一个计算器的基本功能,整数的加减乘除操作。遵循运算符优先次序,但是不要求加括号。
分析:
(1)使用Stack存储数据,这样做的好处是在乘除操作的时候可以取出最近存进的整数,乘除操作完再把结果压进Stack;
(2)字符串处理的时候使用Character.isDigit()方法来判断,这里容易犯错的是,操作符的判断比数字判断先出现,但是在压站的时候会先压数字,所以操作符的处理会滞后。见代码。
coding:
import java.util.*;public class BasicCalculater { public int calculate(String s){ Stack stack = new Stack(); int number = 0; char sign = '+'; for(int i = 0; i < s.length(); i++){ char cur = s.charAt(i); if(Character.isDigit(cur)) number = number * 10 + (int)(cur - '0'); //这里不能漏掉最后一个数字 if(!Character.isDigit(cur) || i == s.length() - 1 && cur != ' '){ //这里要注意,要用sign来判断,不能用cur来判断 if(sign == '+') stack.push(number); else if(sign == '-') stack.push(-number); else if(sign == '*') stack.push(stack.pop() * number); else if(sign == '/') stack.push(stack.pop() / number); sign = cur; number = 0; } } int result = 0; for(int i : stack) result += i; return result; } public static void main(String[] args){ BasicCalculater BC = new BasicCalculater(); String s = "1+2*3+6/3"; System.out.println(BC.calculate(s)); }}
关键字:stack
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!