所以, 例如,如果我有一个名为“divide”的方法,它只会划分为int并返回一个int,那么检查除数的最佳方法是什么!= 0
方式1:
private int divide(int i1, int i2) {
if(i2 == 0) return 0;
return i1/i2;
}
方式2:
private int divide(int i1, int i2) {
if(i2 != 0) {
return i1/i2;
} else {
return 0;
}
}
您更喜欢哪一个?
编辑:我知道,你通常不会编写这样的函数,因为如果除数为0,它会抛出异常。这只是为了澄清我的问题。
编辑2:如果除数为0,我只是将方法函数更改为0。
答案 0 :(得分:1)
使用第一种方法更常见且(我相信更广泛接受),就好像您要检查多于一个或两个变量一样,您开始获得非常长的行缩进。与第二种方法相比,第一种方法也更简洁。
答案 1 :(得分:1)
我更喜欢第二个因为它的可读性,如果你的要求将来会改变,如果 i2 == o那么你可以轻松地保持它。
答案 2 :(得分:1)
如果您的目标是在第二个参数为RuntimeException
时抛出0
,则无需执行任何操作。
private int divide(int i1, int i2) {
return i1/i2; // This will throw an ArithmeticException
}
上面的代码会抛出ArithmeticException
,从RuntimeException
延伸,从而减少了明确抛出RuntimeException
的工作。
编辑:由于您问题中的代码段只是一个示例,因此这是更新后的答案。
避免不必要的else
会更加清洁和更好,例如在这种情况下,因为else
是另一个分支块,如果你真的不会在那里做太多不仅仅是return
,没有它,代码会更好。
如果它进入if
,它会返回,从而使else
无用,如果它没有,那么只需return
就足够了所有你需要的从方法返回return
。
private int divide(int i1, int i2) {
if(i2 == 0) {
return 0;
}
return i1/i2;
}
答案 3 :(得分:1)
我更喜欢第二种方式,因为它比Sanjay Rajjadi说的更具可读性,
private int divide(int i1, int i2) {
if(i2 != 0) {
return i1/i2;
} else {
throw new RuntimeException();
}
}
但为什么抛出异常?你可以向用户显示警告或消息,要求他插入新的int。
答案 4 :(得分:1)
就个人而言,我不喜欢它们,因为投掷RuntimeException
不是一个好习惯;你应该创建自己的Exception子类。除此之外,我不明白为什么有必要显式抛出此异常,因为结果异常(java.lang.ArithmeticException
)是RuntimeException
的子类。
也许你应该尝试这样的事情?
private int divide(int i1, int i2) throws DivisionByZeroException {
try {
return i1/i2;
} catch(ArithmeticException e) {
throw new DivisionByZeroException(e);
}
答案 5 :(得分:0)
private int divide(int i1, int i2) throws IllegalArgumentException{
if(i2==0)
throw new IllegalArgumentException("Argument 'divisor' is 0");
else return i1/i2;
}
答案 6 :(得分:0)
无。
如果除数为零,则不必显式地 throw
异常java.lang.ArithmeticException
。
答案 7 :(得分:0)
如果我真的需要,我会使用第一种方法,因为如果检查很多争论,会有大量的缩进。
尽管如此,我不得不说:如果需要这样的检查,请务必评估两次。
在您的特定情况下,检查是多余的,因为除以0会抛出ArithmeticException
,它们会说:/ by zero
。
请参阅this question,了解为何经常夸大支票,尤其是使用空/非空检查。
答案 8 :(得分:0)
使用以下方法。你不需要检查零。只是抛出算术异常。
private int divide( int i1, int i2 ) throws ArithmeticException
{
return i1/i2;
}