[英]How should I throw a divide by zero exception in Java without actually dividing by zero?
我有一個需要兩個輸入的I2C設備:分母和分子。 兩者都寫入單獨的地址,因此不進行實際計算( numerator/denominator
)。 這樣做的問題是在I2C器件上可能會出現除零,因此需要檢查除零誤差。 理想情況下,如果划分由java代碼完成,則會發生完全相同的事情。
目前,我已經提供了一個未使用的變量進行划分,但我擔心它會被優化掉:
public void setKp(int numerator, int divisor)
{
int zeroCheck = numerator / divisor;
//... doesn't use zeroCheck
}
當然有更好的方法!
你不應該拋出ArithmeticException。 由於錯誤在提供的參數中,因此拋出IllegalArgumentException
。 正如文件所說:
拋出以指示方法已被傳遞非法或不適當的參數。
這正是這里發生的事情。
if (divisor == 0) {
throw new IllegalArgumentException("Argument 'divisor' is 0");
}
做這個:
if (denominator == 0) throw new ArithmeticException("denominator == 0");
ArithmeticException是除以0時通常拋出的異常。
public class ZeroDivisionException extends ArithmeticException {
// ...
}
if (denominator == 0) {
throw new ZeroDivisionException();
}
有兩種方法可以做到這一點。 要么創建自己的自定義異常類來表示除以零的錯誤,要么拋出java運行時在這種情況下拋出的相同類型的異常。
public class DivideByZeroException() extends ArithmeticException {
}
然后在您的代碼中,您將檢查除以零並拋出此異常:
if (divisor == 0) throw new DivideByZeroException();
在代碼中添加除以零的檢查並拋出算術異常:
if (divisor == 0) throw new java.lang.ArithmeticException("/ by zero");
另外,你可以考慮拋出一個非法的參數異常,因為除數為零是一個不正確的參數傳遞給你的setKp()方法:
if (divisor == 0) throw new java.lang.IllegalArgumentException("divisor == 0");
就像是:
if(divisor == 0) {
throw new ArithmeticException("Division by zero!");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.