HOWTO · Java

修復 Java 中缺少返回語句的錯誤型別

這篇文章解釋了為什麼在 Java 中使用 if/for/while 會丟失 return 語句。

本頁內容

在方法中使用 if、for 或 while 迴圈時,Java 編譯器可能會報告 missing return statement 錯誤。本文解釋了為什麼會發生這種情況以及如何處理它。

為什麼 Java 中會出現 missing return statement 錯誤

最常見的 Java 錯誤之一是 missing return statement。

這是編譯過程中發生的錯誤。正如該語句所暗示的,該問題通常是由程式中缺少 return 語句引起的。

讓我們以一個可以產生此錯誤的程式作為參考。

這是一個在確定作為引數傳遞的數字是否為素數後返回 String 型別變數的方法。該方法利用了 if、else 和 for 迴圈。

當我們仔細看這個程式時,我們可以看到第一對 if-else 迴圈,每個都返回一個 String。在 else 迴圈中,我們執行 for 迴圈,然後使用 if 和 else 返回一個 String。

乍一看還不錯。但仔細檢查後,我們可以發現,如果 for 迴圈失敗,else 語句不會返回任何內容。

換句話說,編譯器不知道 else 迴圈內的 for 迴圈將返回一個 String。它會產生歧義。

即使 for 迴圈執行並返回一個型別,編譯器也必須假設它有可能不返回任何內容。因此,為了消除編譯器的這種混淆,else 方法應該返回一個 String 型別。

Java 文件建議,如果我們宣告一個具有返回型別的方法,則需要在方法的末尾有一個 return 語句。否則,編譯器將顯示 missing return statement 錯誤。

當我們錯誤地省略了方法的 return 語句時會引發此錯誤,因為它沒有返回型別或沒有使用 void 型別宣告。

public class TestError {
  public static void main(String[] args) {
    System.out.println(Check_Prime(10));
    System.out.println(Check_Prime(5));
    System.out.println(Check_Prime(2));
    System.out.println(Check_Prime(1));
  }
  public static String Check_Prime(int number) {
    int i;
    if (number == 2) {
      return "Prime";
    } else {
      if (number < 2) {
        return "Not Prime";
      } else {
        for (i = 2; i <= number; i++) {
          if (number % i == 0) {
            return "Not Prime";
          } else {
            return "Prime";
          }
        }
      }
    }
  }
}

修復 Java 中的 Missing Return Statement 錯誤型別

public class TestError {
  public static void main(String[] args) {
    System.out.println(Check_Prime(10));
    System.out.println(Check_Prime(5));
    System.out.println(Check_Prime(2));
    System.out.println(Check_Prime(1));
  }
  public static String Check_Prime(int number) {
    int i;
    int k = number / 2;
    if (number == 2) {
      return "Prime";
    } else {
      if (number < 2) {
        return "Not Prime";
      } else {
        for (i = 2; i <= k; i++) {
          if (number % i == 0) {
            return "Not Prime";
          } else {
            return "Prime";
          }
        }
        return "";
      }
    }
  }
}

輸出:

Not Prime
Prime
Prime
Not Prime