【问题标题】:How can I replace throw exception with a System.out.print() in switch statement default case [closed]如何在 switch 语句默认情况下用 System.out.print() 替换 throw 异常 [关闭]
【发布时间】:2020-08-10 14:43:22
【问题描述】:

这里我有一个简单的类来执行计算器操作。

Calculator.java

    private final ArrayList <Double> values;
    private final String operation;

    public Calculator(ArrayList<Double> values, String operation) {
        this.values = values;
        this.operation = operation;
    }

    public double calculate(){
        double num1 = values.get(0);
        double num2 = values.get(1);
        double answer;

        switch (operation) {
            case "+" :
                answer = addition(num1,num2);
                break;
            case "-" :
                answer = subtraction(num1,num2);
                break;
            case "*" :
                answer = multiplication(num1,num2);
                break;
            case "/" :
                answer = division(num1,num2);
                break;
            default:
                throw new IllegalStateException("Unexpected value: " + operation);
        }
        return answer;
    }

    public double addition(double num1,double num2){
        return num1+num2;
    }
    public double subtraction(double num1,double num2){
        return num1-num2;
    }
    public double multiplication(double num1,double num2){
        return num1*num2;
    }
    public double division(double num1,double num2){
        return num1/num2;
    }
}

这里我要替换throw new IllegalStateException("Unexpected value: " + operation); 这个带有我自己的 System.out 消息并且什么都不返回并停止程序执行。

这里我不能使用return 0,因为这是一个计算器。

其实我想知道如何在cli中使用我自己的system out语句正确处理这个异常,而不会出现红字异常消息。

我在这里使用过 JDK 14。

【问题讨论】:

  • 你能展示一下使用这个Calculator类并调用calculate方法的代码吗?要处理异常,您可以在此处添加 try-catch
  • 我实际上建议使用ArithmeticException,因为这也将导致除以零。
  • 那我怎样才能修改我的switch语句没有默认呢?
  • 最接近什么都不返回的方法是调用System.exit(int)
  • ....是什么让您无法用 System.out.println 替换异常?

标签: java exception switch-statement java-14


【解决方案1】:

[...] 并返回注释并停止程序执行。

由于方法签名的返回类型为double,因此您必须返回一个结果。你不能返回没有结果

为此,您可以更改方法协定并将calculate 方法设为返回类型void,并通过单独的方法访问计算结果。

private final ArrayList <Double> values;
private final String operation;
private Double result; //an instance variable to store the result.

public void calculate() {
    Double num1 = values.get(0);
    Double num2 = values.get(1);
    switch (operation) {
        case "+" :
            result = addition(num1,num2);
            break;
        case "-" :
            result = subtraction(num1,num2);
            break;
        case "*" :
            result = multiplication(num1,num2);
            break;
        case "/" :
            result = division(num1,num2);
            break;
        default:
           //Your print statement here
    }
 }

public Optional<Double> getResult() {
    return Optional.ofNullable(result);
}

当调用者在calculate 之前调用getResult() 时会发生这种情况。我会把它留给你。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多