Как заменить исключение throw на System.out.print() в случае оператора switch по умолчанию

Здесь у меня есть простой класс для выполнения операций с калькулятором.

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 потому что это калькулятор.

На самом деле я хочу знать, как правильно обрабатывать это исключение с помощью моей собственной инструкции system out в cli без сообщения об исключении с красной буквой msg

Я использовал здесь JDK 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);
}

Проблема в том, что происходит, когда звонящий звонит getResult() перед calculate. Я оставлю это тебе.

Другие вопросы по тегам