Java写一个计算器 控制台输入算式 可以实现先乘除后加减 没有括号功能 只有加减乘除

loser-- 2015-08-31 05:31:03
Java写一个计算器 控制台输入算式 可以实现先乘除后加减 没有括号功能 只有加减乘除

比如控制台输入“54151+819*5165+15-48/189+5961”输出答案 可以先乘除后加减的
...全文
755 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
解开者 2015-09-01
  • 打赏
  • 举报
回复
List<Object> toSuffix(String s) {
		Map<String, Integer> map = new HashMap<String, Integer>();
		map.put("+", 0);
		map.put("-", 0);
		map.put("*", 1);
		map.put("/", 1);
		List<Object> list = new ArrayList<Object>();
		String[] number = s.split("[^\\d]");
		String[] operator = s.split("\\d+");
		Stack<String> stack = new Stack<String>();
		for (int i = 0; i < number.length; i++) {
			if (operator[i].length() != 0) {
				while (!stack.isEmpty()
						&& map.get(operator[i]) <= map.get(stack.peek())) {
					list.add(stack.pop());
				}
				stack.push(operator[i]);
			}
			list.add(Double.parseDouble(number[i]));
		}
		while (!stack.isEmpty()) {
			list.add(stack.pop());
		}
		return list;
	}

	double calculate(List<Object> list) {
		Stack<Double> stack = new Stack<Double>();
		for (Object obj : list) {
			if (obj instanceof Double) {
				stack.push((Double) obj);
			} else {
				double b = stack.pop();
				double a = stack.pop();
				if (obj.equals("+"))
					stack.push(a + b);
				if (obj.equals("-"))
					stack.push(a - b);
				if (obj.equals("*"))
					stack.push(a * b);
				if (obj.equals("/"))
					stack.push(a / b);
			}
		}
		return stack.pop();
	}
迷林 2015-09-01
  • 打赏
  • 举报
回复
这个很容易实现的,楼主可以去百度看看 上面有很多
解开者 2015-09-01
  • 打赏
  • 举报
回复
后缀式计算,应该很容易搜得到

50,526

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧