Java 为什么';编译器不会抛出一个错误,说“不”;“无返回语句”;?

Java 为什么';编译器不会抛出一个错误,说“不”;“无返回语句”;?,java,return,Java,Return,我试图解决Leetcode中的一个问题,讨论的解决方案之一是: public class Solve { public static void main(String[] args) { String haystack = "mississippi"; String needle = "issip"; System.out.println(strStr(haystack,needle)) ; } public static

我试图解决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;
            }
        }
    }
}

编译器不应该在这里抛出“No return statement”错误吗?

这是因为您没有为循环计数器指定角点值。
如果您添加smth like
ifor
的第一个
循环对于编译器来说是无限的,我们知道它将返回,但编译器没有理由抱怨。好问题

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
循环中断。因此,除了
return
语句外,外部
for
循环没有退出条件。没有方法不能返回值的路径,因此编译器没有理由抱怨

您的两个for循环都是无限的,第二个循环无论如何总有一天会中断或返回!但是第一个甚至没有中断,那么Java知道你永远不会富到最后一行

 for (int i = 0; ; i++) {
      //Your second loop which is capable of returning or breaking (the second one is not technically infinite.
 }

请参见此处:否。没有导致外部循环终止并因此无法返回值的代码路径。现在,如果
中断
终止了外部循环,您将获得一个积分。但是可以终止外循环的唯一条件是
返回i
-1
 for (int i = 0; ; i++) {
      //Your second loop which is capable of returning or breaking (the second one is not technically infinite.
 }