为什么这个JAVA实例方法总是显错?

import java.util.ArrayList;
import java.util.Date;

public class Schedule {
ArrayList<Flight> flightList = new ArrayList();
java.util.Date date = new java.util.Date();

public Schedule() {
    flightList = new ArrayList(flightList);
    this.date.getTime();
}

public Flight findFlight(String num){
    for (Flight flight: flightList)
    if (flight.getFlightnum().equals(num)){
        return flight;}
    else
        return null;
    }

findFlight这个方法,总是显示我的return类型有错误.明明是匹配的了,这是为啥呢?

这是因为你在for循环里面有return语句,但是在外面没有。
如果flightList为空的时候,就不知道返回什么了。

把else去掉,return null属于else代码块,所以系统自认没有return

是外面没有返回值。。。

你这代码写的可读性好差,for循环后面加大括号,if和else也最好加上大括号,让人一看就能看懂

你这段代码就是一个很简单的遍历查找过程,找不到应该是遍历完整个List后才返回null的,所以你的else分支没有意义的。
Eclipse的自动修复功能ctrl+1显示可以直接在else分支后面return null。但是这样就会不合逻辑,如果你的num号的Flight对象不是列表中的第一个,那么你的代码永远都是进入了else分支返回null的。
所以正确的代码是:去掉else分支,最后for循环完成后仍没有找到才是return null.

public Flight findFlight(String num){
    for (Flight flight: flightList)
             //找到就返回
         if (flight.getFlightnum().equals(num)){
          return flight;
                    }
    }
           //for循环结束仍然没有找到则返回null
        return null;
    } 

首先你的这段代码可读性真的好差,for循环在第一次执行时就在if-else语句中被终止了意义何在。

for循环的大括号在哪里,

第一 格式不太好 第二,可以在最后加一个return null

public Flight findFlight(String num){
Flight f = null;
int k = 0;
while(k < flightList.size()) {
Flight thisf = flightList.get(k);
if(thisf.getFlightnum().equals(num)) {
f = thisf;
break;
}
k++;
}
return f;
}

 public Flight findFlight(String num){
        Flight f = null;
        int k = 0;
        while(k < flightList.size()) {
                Flight thisf = flightList.get(k);
                if(thisf.getFlightnum().equals(num)) {
                        f = thisf;
                        break;
                }
                k++;
        } 
    return f;
}