当前位置: 首页 > 知识库问答 >
问题:

在switch语句默认情况下,如何用System.Out.Print()替换抛出异常

赏高格
2023-03-14

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

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;
    }
}

这里,我想用我自己的System.out消息替换Throw new IllegalStateException(“意外值:”+operation);这一个,返回Note并停止程序执行。

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

实际上,我想知道如何在cli中使用自己的system out语句正确地处理这个异常,而不需要一个红字异常消息

我在这里使用了JDK14

共有1个答案

东门秦迟
2023-03-14

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

由于方法签名的返回类型为double,因此必须返回结果。 你不能毫无结果地回来。

为此,您可以更改方法约定并使返回类型为voidcalculate方法通过单独的方法访问计算结果。

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()时会发生什么。 那就交给你了。

 类似资料:
  • 所以基本上我有一个学校的项目,它包含一个time循环中的开关语句。 假设我输入“1”,它在大小写“1”中运行代码。然后它应该在之后中断。但默认代码也总是运行。 这是案例“1”代码: 这是默认代码: 以下是输出: 我很有信心我的代码是正确的,但是如果我缺少什么,请告诉我如何修复它,谢谢。

  • 问题内容: 对于建议抛出异常的人: 抛出异常不会给我编译时错误,而是给我运行时错误。我知道我会抛出异常,我宁愿在编译时死掉,也不愿在运行时死掉。 首先,我正在使用Eclipse 3.4。 我有一个数据模型,它的mode属性是Enum。 我目前正在编写此模型的视图,并且我有代码 我收到一个错误“此方法必须返回类型为java.awt.Color的结果”,因为我没有默认大小写,并且在函数末尾没有返回xx

  • 我想这样做: 这样的事情可能吗?我想防止代码重复。我知道在这个特定的示例中,没有什么理由这样做,因为重复的代码很小。我能想到的唯一一件事是这样的(使用开关盒的穿透能力): 我宁愿不这样做,因为增加案例数量并在底部设置默认值会更有意义。 但我想知道,如果我这样做,它会不会搞乱引擎盖下的goto语句?特别是,由于数字或顺序错误,决定使用哪个goto语句不会花费更长的时间吗?switch语句中的顺序重要

  • 问题内容: 只是想弄清楚如何对Java switch语句使用多种情况。这是我要执行的操作的一个示例: 与必须要做的事情: 有什么想法,如果可能的话,或者什么是好的选择? 问题答案: 可悲的是,这在Java中是不可能的。您将不得不使用using 语句。

  • 问题内容: 我想用Python编写一个函数,该函数根据输入索引的值返回不同的固定值。 在其他语言中,我将使用语句,但是Python似乎没有语句。在这种情况下,推荐的Python解决方案是什么? 问题答案: 你可以使用字典:

  • 所以基本上我有一个学校项目,它在while循环中包含一个switch语句。 假设我输入“1”,它运行案例“1”中的代码。然后它会在之后破裂。但默认代码也总是可以运行。 以下是案例“1”代码: 这是默认代码: 以下是输出: 我很有信心我的代码是正确的,但是如果我缺少什么,请告诉我如何修复它,谢谢。

  • 我有一个非常基本的函数,它搜索的数组列表,并返回与传递给它的参数匹配的帐户。但是,一旦抛出CustomerAccountNotFoundException,我的for循环就会中断。 我通过在异常后打印的值来测试这一点,该值一直被重置为0。如何在抛出异常后继续循环?我希望每次帐户不匹配时都抛出它,当它匹配时返回帐户。我还尝试过但不起作用。

  • 我有一个实现以下接口的基类,上面声明的方法抛出基本异常类型。 有许多具体的类扩展了基类,我不想在所有这些类中添加块。有没有一种方法可以处理而不添加? 接口 基层 混凝土类示例(共30个)