gpt4 book ai didi

java - java中字符串的表达式求值

转载 作者:行者123 更新时间:2023-12-01 13:42:22 24 4
gpt4 key购买 nike

我想创建一个方法,其中输入是一个字符串,它是一个方程并返回方程的结果。

类似这样的

String s;
s = "23*14*(15-4)";
System.out.println(ecuation(s));

我找到了一个计算方程的java程序,但我不知道如何使其适应我的需要。有人可以帮忙吗?

public class Evaluate {
public static void main(String[] args) {
Stack<String> ops = new Stack<String>();
Stack<Double> vals = new Stack<Double>();

while (!StdIn.isEmpty()) {
String s = StdIn.readString();
if (s.equals("(")) ;
else if (s.equals("+")) ops.push(s);
else if (s.equals("-")) ops.push(s);
else if (s.equals("*")) ops.push(s);
else if (s.equals("/")) ops.push(s);
else if (s.equals("sqrt")) ops.push(s);
else if (s.equals(")")) {
String op = ops.pop();
double v = vals.pop();
if (op.equals("+")) v = vals.pop() + v;
else if (op.equals("-")) v = vals.pop() - v;
else if (op.equals("*")) v = vals.pop() * v;
else if (op.equals("/")) v = vals.pop() / v;
else if (op.equals("sqrt")) v = Math.sqrt(v);
vals.push(v);
}
else vals.push(Double.parseDouble(s));
}
StdOut.println(vals.pop());
}
}

最佳答案

Evaluate您发现的程序正在读取表达式中的每个标记(据称来自 STDIN)并对其进行处理。如果您要重用此程序,您需要

  1. 编写一个标记器,从字符串表达式中生成标记
    • 即返回“23*14*(15-4)”作为 [ 23, *, 13, *, (, 15, -, 4, ) ] 的列表
  2. 重构 main 方法以获取 Iterator<String>和迭代器通过它,其中 next()方法返回列表中的下一个标记。
  3. 将上面 #1 中生成的列表中的 list.iterator() 传递给 #2 中的重构方法。

HTH。

关于java - java中字符串的表达式求值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20622793/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com