我try 构建一个带有用户输入的计算器,并希望按顺序计算所有操作数.我将用户输入保存在两个字符串ArrayList中: ->所有数字的邮政编码 ->所有操作数的后置操作数

我试着用不同的for循环和Switch/Case来计算它们,但一旦输入两个正号或斜杠,它就不能正常工作. 有没有一种方法可以交替地将这两个ArrayList放在一起并计算它,然后如下所示:

List N: 10 5 3 2

List M: 10+5*3-2

List O:   + * -

然后最后把它放入一个变量中?

推荐答案

First, I believe you mean postOperators, as opposed to postOperands.
An operand is the value.

您可以创建一个for循环来迭代数字的List,并将它们编译成result.

此外,您应该判断Abstract Syntax Tree的 struct .

/** @param postNumbers must be mutable */
double evaluate(List<String> postNumbers, List<String> postOperators) {
    double result = Double.parseDouble(postNumbers.remove(0));
    double value;
    char operator;
    for (int index = 0; index < postNumbers.size(); index++) {
        value = Double.parseDouble(postNumbers.get(index));
        operator = postOperators.get(index).charAt(0);
        result = switch (operator) {
            case '*' -> result * value;
            case '/' -> result / value;
            case '+' -> result + value;
            case '-' -> result - value;
            default -> throw new IllegalArgumentException();
        };
    }
    return result;
}

示例输入

List<String> postNumbers = new ArrayList<>(Arrays.asList("10", "5", "3", "2"));
List<String> postOperators = List.of("+", "*", "-");
double result = evaluate(postNumbers, postOperators);

输出

43.0

Java相关问答推荐

Java Android OnKeyspel事件未触发

如何专门保存数据而不显示在jTable中?

javafx getHostServices(). showDocument()调出Chrome而不是默认浏览器(Linux)

如何将kotlin代码转换为java

inteliJ中是否有一个功能可以自动在块注释中的/*后面添加一个空格?''

Java编译器抛出可能未正确初始化的错误?

Com.example.service.QuestionService中的构造函数的参数0需要找不到的类型为';com.example.Dao.QuestionDao;的Bean

垃圾回收器是否真的删除超出作用域的对象?

根本不显示JavaFX阿拉伯字母

将关闭拍卖的TimerService

通过Java列表中的某些字段搜索值

如何根据配置动态创建N个bean

JOLT根据值删除并保留其余的json键

对角线填充二维数组

JavaFX标签中的奇怪字符

获取所有可以处理Invent.ACTION_MEDIA_BUTTON Android 13 API33的Android包

具有多个分析模式的复杂分隔字符串的正则表达式

Bash数组的单引号元素并使用空格连接

如何正确使用java.time类?

无泄漏函数的Java DRY