我正在学习Java,下面是一个简单的函数,需要两个数字和一个char来做一些基本的加,减,乘和除运算。完成后,它将返回结果。
请参阅以下代码中的注释1,2 -
我想发送null但由于int返回类型,编译器发出错误。这个案例是如何在Java中处理的。我来自一个快速的背景,其中一个函数可以有一个可选的返回类型,可以在使用Guard调用函数时解包。我很想知道用Java处理这种情况的正确方法。
static int doCalc(int num1, int num2, char operation) {
switch(operation) {
case 'a':
return num1 + num2;
case 's':
return num1 - num2;
case 'm':
return num1 * num2;
case 'd':
return num2 != 0 ? num1 / num2 : -1; // **COMMENT 1**
default:
System.out.println("not a valid operation. use 'a' 's' 'm' 'd'");
return -1; // **COMMENT 2**
}
}
答案 0 :(得分:1)
原始int
(或任何其他原语)不能是null
。您可以使用包装类(在本例中为java.lang.Integer
),并返回null
以获取错误输入和有效输入上的自动装箱值:
static Integer doCalc(int num1, int num2, char operation) {
switch(operation) {
case 'a':
return num1 + num2;
case 's':
return num1 - num2;
case 'm':
return num1 * num2;
case 'd':
return num2 != 0 ? num1 / num2 : null;
default:
System.out.println("not a valid operation. use 'a' 's' 'm' 'd'");
return null;
}
}
答案 1 :(得分:0)
处理此问题的正确方法是在操作无效时抛出IllegalArgumentException
,在尝试除以零时抛出ArithmeticException
。
答案 2 :(得分:0)
通常你会抛出异常。 例如
static int doCalc(int num1, int num2, char operation) {
switch(operation) {
case 'a':
return num1 + num2;
case 's':
return num1 - num2;
case 'm':
return num1 * num2;
case 'd':
if (num2 == 0) {
throw new IllegalArgumentException("cannot divide by zero");
}
return num1 / num2;
default:
throw new IllegalArgumentException("not a valid operation. use 'a' 's' 'm' 'd'");
}
}