なぜコンパイラは、「いいえのreturn文を」というエラーをスローしませんか?

Amberesの:

私が解決しようとしていた問題 Leetcodeでは、と議論し解決策の一つは、以下の通りでした:

public class Solve {
    public static void main(String[] args) {
        String haystack = "mississippi";
        String needle = "issip";
        System.out.println(strStr(haystack,needle)) ;
    }

    public static int strStr(String haystack, String needle) {
        for (int i = 0; ; i++) {
            for (int j = 0; ; j++) {
                if (j == needle.length()) return i;
                if (i + j == haystack.length()) return -1;
                if (needle.charAt(j) != haystack.charAt(i + j)) break;
            }
        }
    }
}

コンパイラは、ここで「いいえreturn文」というエラーがスローされているべきではないでしょうか。

GBlodgett:
for (int i = 0; ; i++) {
    for (int j = 0; ; j++) {
       if (j == needle.length()) return i;
       if (i + j == haystack.length()) return -1;
       if (needle.charAt(j) != haystack.charAt(i + j)) break;
    }
}

ここでは、両方のforループは無限ループです。break声明は、内側の勃発forループ。したがって、外側のための終了条件が存在しないfor以外はループreturn文。メソッドができないために経路がないreturn値がそのコンパイラが文句を言うための理由はありませんが。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=205081&siteId=1