Java 制作计算器的求解部分,pemdas序列

Java 制作计算器的求解部分,pemdas序列,java,swing,Java,Swing,我想做一个GUI计算器。到目前为止,一切似乎都很好,但我如何才能实现内置windows计算器,当您操作时,您可以看到例如“100+2+9*4/8-3”,这样每当您单击另一个+-/*按钮时,它都将按顺序求解。彭达斯?我想。我可以让计算器像那样工作,但它只能按顺序求解,因为我只存储2个值,所以我想知道如何存储所有当前操作的值及其运算符(+-/*) 所以我想知道如何存储所有当前操作及其运算符(+-/*)的值 您可以尝试将每个操作存储在ArrayList中,并将每个操作放在一个名为operation的类

我想做一个GUI计算器。到目前为止,一切似乎都很好,但我如何才能实现内置windows计算器,当您操作时,您可以看到例如“100+2+9*4/8-3”,这样每当您单击另一个+-/*按钮时,它都将按顺序求解。彭达斯?我想。我可以让计算器像那样工作,但它只能按顺序求解,因为我只存储2个值,所以我想知道如何存储所有当前操作的值及其运算符(+-/*)

所以我想知道如何存储所有当前操作及其运算符(+-/*)的值

您可以尝试将每个操作存储在
ArrayList
中,并将每个操作放在一个名为
operation
的类中,该类有3个变量
number1
number2
operation
,可以是
enum
字符串
值。我更喜欢enum方法,但我把它留给你

所以,你可以上这门课:

import java.util.ArrayList;

public class PemdasSample {
    public static void main(String args[]) {
        ArrayList <Operation> operations = new ArrayList<Operation>();
        operations.add(new Operation(5, 5, "SUM"));
        operations.add(new Operation(2, 2, "REST"));
        operations.add(new Operation(3, 4, "MULTIPLY"));

        for (Operation operation : operations) {
            switch (operation.getOperation()) {
                case "SUM":
                    System.out.println(operation.getNumber1() + operation.getNumber2());
                    break;
                case "REST":
                    System.out.println(operation.getNumber1() - operation.getNumber2());
                    break;
                case "MULTIPLY":
                    System.out.println(operation.getNumber1() * operation.getNumber2());
                    break;
                default:
                    System.out.println("Operation not found");
                    break;
            }
        }
    }

    static class Operation {
        int number1;
        int number2;
        String operation;

        public Operation(int number1, int number2, String operation) {
            this.number1 = number1;
            this.number2 = number2;
            this.operation = operation;
        }

        public int getNumber1() {
            return number1;
        }

        public void setNumber1(int number1) {
            this.number1 = number1;
        }

        public int getNumber2() {
            return number2;
        }

        public void setNumber2(int number2) {
            this.number2 = number2;
        }

        public String getOperation() {
            return operation;
        }

        public void setOperation(String operation) {
            this.operation = operation;
        }
    }
}
您可以采用逻辑(并将
操作
类分离为它自己的文件,而不是像我那样作为内部类,不是静态的,等等)并修改您的程序

您没有提供任何代码,因此,如果这种方法不适合您,请解释原因并提供一个有效的示例来说明您的问题

免责声明 由于字符串开关,此代码示例需要Java7才能工作,有关更多信息,请参阅


我也没有将PEMDAS逻辑添加到程序中,因为OP没有提供任何代码,只是帮助了解如何存储操作。

另请参见此。它使用
ScriptEngine
对文本字段中的表达式求值。Ohh内置求值器感谢您提供的新信息!不客气。:)当然,如果编程练习的目的是了解如何自己完成该过程,那么脚本引擎将无关紧要。但是如果主要的目的只是计算表达式,那就是我的“go to”方法。为什么要重新发明轮子?你好,我设法解决了我的问题,我学习了中缀到后缀符号,然后对它进行了评估XD感谢兄弟的帮助!
10
0
12