示例:
import java.util.*; import java.io.*; public class tt { public static void main(String[] args) { foo(); } public static String foo() { int i=0; while(i<10) { return "ggg"; } } }
該函數編譯便會報錯:缺少返回語句。盡管看起來(i<10)是肯定為真的,但是編譯器不會把i=0帶進去算,所以它覺得foo函數有可能無返回值(即while后條件為假的時候)。
同理,把while改成if,編譯報同樣的錯誤。
把while(i<10)改為while(true)后,不再報錯。
但是C就隨意得多,跟Java比起來以下如此不確定的代碼也能正常編譯運行:
#include <stdlib.h> #include <stdio.h> int main() { int a=foo(); printf("%d\n",a); return 0; } int foo() { int i=0; while(i++<10) { if(i>5) return 5; else return 4; } }
再舉個java例子:
這么寫會提示缺少返回語句,
public static boolean has3(int[] a) { for(int i=0; i<a.length; ++i) { if (a[i]==3) return true; else return false; } }
稍稍改動一下即可:
import java.util.*; import java.io.*; public class has { public static void main(String[] args) { int[] b = {1,2,3,4,5}; int[] c = {1,2,4,5}; System.out.println(has3(b)); System.out.println(has3(c)); } public static boolean has3(int[] a) { for(int i=0; i<a.length; ++i) { if (a[i]==3) return true; } return false; } }
