Java 编译错误:缺少返回语句

示例:

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;
    }
}

 

  

 

posted @ 2014-04-03 18:52  duanguyuan  阅读(9091)  评论(0编辑  收藏  举报