Java 中除以零異常

Muhammad Zeeshan 2023年10月12日
  1. Java 中整數除以零的異常情況
  2. Java 中除以浮點零異常
Java 中除以零異常

本文將演示在 Java 程式中除以零時會發生什麼。除以零是未定義的操作,因為它在常規算術中沒有意義。

雖然它經常與程式設計錯誤有關,但情況並非如此。根據 Java 除法運算定義,我們可以看一個被零整數除的場景。

Java 中整數除以零的異常情況

將實數除以零是一個數學過程,看起來相對容易,但缺乏明確和確鑿的解決方案。因為定義的任何努力都會導致矛盾,所以這個操作的結果在技術上被認為是未定義的。

因為這是除法運算的一個特定示例,Java 將其識別為異常情況,並在執行時遇到它時丟擲 ArithmeticException

public class dividebyzero {
  public static int divide(int f, int g) {
    int h = f / g;
    return h;
  }
  public static void main(String... args) {
    int d = 8, r = 0;
    int e = divide(d, r);
    System.out.println(e);
  }
}

輸出:

Exception in thread "main" java.lang.ArithmeticException: / by zero
    at dividebyzero.divide(dividebyzero.java:3)
    at dividebyzero.main(dividebyzero.java:8)

在 Java 中解決除以整數零異常

處理除以零的正確方法是確保 divisor 變數永遠不會是 0

當輸入無法控制,並且方程中存在零的可能性時,將其視為預期選擇之一併相應地解決它。

這通常需要在使用除數之前檢查除數的值,如下所示:

public class dividebyzero {
  public static int divide(int f, int g) {
    int h = f / g;
    return h;
  }
  public static void main(String... args) {
    int d = 8, r = 0;
    if (r != 0) {
      int e = divide(d, r);
      System.out.println(e);
    } else {
      System.out.println("Invalid divisor: division by zero can't be processed)");
    }
  }
}

輸出:

Invalid divisor: division by zero can't be processed)

Java 包含一個名為 ArithmeticException 的特殊異常,用於處理計算中出現的異常情況。

在處理整數除以零等異常情況時,非常精確和小心是避免 ArithmeticException 的關鍵。

Java 中除以浮點零異常

順便說一下,浮點值也有 -0.0;因此,1.0/ -0.0 是 -Infinity。整數運算缺少這些值中的任何一個,而是丟擲一個異常

例如,與 java.lang.ArithmeticException 不同,以下情況除以零時不會產生異常。它表達的是無限

int x = 0;
double y = 3.2500;
System.out.println((y / x));

這是因為你正在使用浮點數。Infinity 通過除以零返回,這與 not a numberNaN 相當。

如果你想避免這種情況,你必須在使用前測試 tab[i]。然後,如有必要,你可以丟擲自己的異常

每當你除以浮點零時,Java 都不會丟擲異常。當你除以整數零而不是雙零時,這隻會注意到執行時錯誤。

如果將 Infinity 除以 0.0,結果是 Infinity

0.0 是一個雙精度字面量,不被視為絕對零。沒有異常,因為雙變數足夠大,可以處理表示接近無窮大的數字。

你可以使用下面顯示的程式碼行來檢查所有可能導致非有限數字的值,例如 NaN0.0-0.0

if (Math.abs(tab[i] = 1 / tab[i]) < Double.POSITIVE_INFINITY) {
  throw new ArithmeticException("Result is non finite");
}

你也可以自己檢查,然後丟擲異常。

try {
  for (int i = 0; i < tab.length; i++) {
    tab[i] = 1.0 / tab[i];
    if (tab[i] == Double.POSITIVE_INFINITY || tab[i] == Double.NEGATIVE_INFINITY) {
      throw new ArithmeticException();
    }
  }
} catch (ArithmeticException xy) {
  System.out.println("ArithmeticException occured!");
}
Muhammad Zeeshan avatar Muhammad Zeeshan avatar

I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.

LinkedIn

相關文章 - Java Exception