JAVA实现字符串计算器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个Java字符串计算器的示例代码,它可以实现基本的加减乘除和括号运算: ```java import java.util.*; public class StringCalculator { private static final Map<String, Integer> priorityMap = new HashMap<String, Integer>() {{ put("+", 1); put("-", 1); put("*", 2); put("/", 2); put("%", 2); put("^", 3); }}; public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入表达式:"); String expression = scanner.nextLine(); System.out.println("计算结果为:" + calculate(expression)); } public static String calculate(String s) { List<String> arrayList = reversePolish.parse(s); Stack<String> stringStack = new Stack<>(); for (int i = 0; i < arrayList.size(); i++) { String str = arrayList.get(i); if (str.equals("+") || str.equals("-") || str.equals("*") || str.equals("/") || str.equals("^") || str.equals("%")) { cal(stringStack, str); } else { stringStack.push(str); } } return stringStack.pop(); } private static void cal(Stack<String> stack, String op) { String b = stack.pop(); String a = stack.pop(); String result = ""; switch (op) { case "+": result = String.valueOf(Double.parseDouble(a) + Double.parseDouble(b)); break; case "-": result = String.valueOf(Double.parseDouble(a) - Double.parseDouble(b)); break; case "*": result = String.valueOf(Double.parseDouble(a) * Double.parseDouble(b)); break; case "/": result = String.valueOf(Double.parseDouble(a) / Double.parseDouble(b)); break; case "^": result = String.valueOf(Math.pow(Double.parseDouble(a), Double.parseDouble(b))); break; case "%": result = String.valueOf(Double.parseDouble(a) % Double.parseDouble(b)); break; } stack.push(result); } private static class reversePolish { public static List<String> parse(String s) { List<String> arrayList = new ArrayList<>(); Stack<String> stack = new Stack<>(); int i = 0; while (i < s.length()) { char c = s.charAt(i); if (Character.isDigit(c) || c == '.') { int j = i; while (j < s.length() && (Character.isDigit(s.charAt(j)) || s.charAt(j) == '.')) { j++; } arrayList.add(s.substring(i, j)); i = j; } else if (c == '(') { stack.push("("); i++; } else if (c == ')') { while (!stack.peek().equals("(")) { arrayList.add(stack.pop()); } stack.pop(); i++; } else { String op = String.valueOf(c); while (!stack.isEmpty() && !stack.peek().equals("(") && priorityMap.get(op) <= priorityMap.get(stack.peek())) { arrayList.add(stack.pop()); } stack.push(op); i++; } } while (!stack.isEmpty()) { arrayList.add(stack.pop()); } return arrayList; } } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_文和_

感觉对您有用,可以来点鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值