Java 为什么';编译器不会抛出一个错误,说“不”;“无返回语句”;?
我试图解决Leetcode中的一个问题,讨论的解决方案之一是: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
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.
}