簡體   English   中英

如何在Java中拋出除零異常而不實際除以零?

[英]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();

拋出ArithmeticException

在代碼中添加除以零的檢查並拋出算術異常:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM