如何在Java中执行算术运算而不使用if-else或switch?

问题描述 投票:0回答:1

我正在用 Java 构建一个简单的计算器,它可以执行基本的算术运算,例如加法

(+)
、减法
(-)
、乘法
(*)
和除法
(/)
。但是,我想避免使用长
if-else
梯子或
switch
案例来确定要执行的操作。

我尝试了以下方法直接将数字和运算符连接成一个字符串,然后将其解析为整数:

class Demo {
    public static void main(String[] args) {
        String num1 = "10";
        String num2 = "20";
        String operator = "+";

        int val = Integer.parseInt(num1 + operator + num2); 

        System.out.println(val);
    }
}

但是,这会引发

java.lang.NumberFormatException
。我意识到Java的
Integer.parseInt
无法解析像
10+20
这样的表达式。

有没有一种方法可以在Java中动态计算此类算术表达式,而不使用冗长的

if-else
梯子或
switch
?如果没有,实现这一目标最有效的方法是什么?

java math calculator numberformatexception expression-evaluation
1个回答
0
投票

有。这并不一定意味着它更好。 老狗程序员可能会这样做:

package minicalc;

public interface Operable {
     public int operate (int a, int b);
}

接下来,

implement
对每个操作进行操作,并创建一个数组,其中每个元素都是一个实现:


package minicalc;

public class MiniCalc {
    
    class Multiplier implements Operable {
        @Override
        public int operate (int a, int b) {
            return a * b;
        }
    }
    
    class Divider implements Operable {
        @Override
        public int operate (int a, int b) {
            return a / b;
        }
    }
    
    class Remainder implements Operable {
        @Override
        public int operate (int a, int b) {
            return a % b;
        }
    }
    
    class Adder implements Operable {
        @Override
        public int operate (int a, int b) {
            return a + b;
        }
    }
    
    class Subtractor implements Operable {
        @Override
        public int operate (int a, int b) {
            return a - b;
        }
    }
    
    final Operable [] operations = {new Adder (), new Subtractor (),
        new Multiplier (), new Divider (), new Remainder ()    };
    static final String opCode = "+-*/%";
    
    public int doCalculation (int a, char code, int b) 
                   throws IllegalArgumentException {
        int i = opCode.indexOf(code);
        if (i < 0) { 
            throw new IllegalArgumentException ("Invalid operation");
        }
        return operations[i].operate (a, b);        
    }

    public static void main(String[] args) {
        MiniCalc mc = new MiniCalc ();
        System.out.println (mc.doCalculation (1,'-', 30));
        System.out.println (mc.doCalculation (100, '/', 13));
        System.out.println (mc.doCalculation (30, '*', 80));
        System.out.println (mc.doCalculation (27, '%', 5));
        System.out.println (mc.doCalculation (33,'+', 27));
        System.out.println (mc.doCalculation(1000,'x', 22));
    }    
}
© www.soinside.com 2019 - 2024. All rights reserved.