java - 如何在 switch 语句默认情况下用 System.out.print() 替换 throw 异常
问题描述
这里我有一个简单的类来执行计算器操作。
计算器.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。
解决方案
[...] 并返回注释并停止程序执行。
由于方法签名具有返回类型,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()
before时会发生什么calculate
。我会把它留给你。
推荐阅读
- c# - 尝试为 xamarin 中的 ListView 的多个 sqlite 数据创建 ViewCell 时出错
- spring - 无法从 gradle 命令行传递弹簧配置文件
- node.js - 如何使用此设置进行简单的路线测试?
- python - 无法使用 Scapy 传输/注入 802.11 数据包
- android - 如何保持条形图的宽度相同?
- c# - C#中的列表到列表转换
- node.js - 等价于 Node 中的 phpinfo()
- c# - 如何纠正错误运算符'&&'不能应用于'bool'类型的操作数?和“布尔”
- git - 如何找到 git 未跟踪的文件,然后 rsync 那些文件?
- java - 如何访问 Java 中导入类的源代码?