2017-03-03 45 views
0

在項目中,我有以下方法,它遍歷類型枚舉,也在下面呈現。問題是當if語句滿足某些值時,for循環會中斷並且該方法返回false。這段代碼有什麼問題?對於滿足內部if語句的循環休息

謝謝。

private boolean genreExists(Integer num) { 
    Genre[] genres = Genre.values(); 
    for(Genre g : genres){ 
     if(num == g.getId()){ 
      return true; 
     } 
    } 
    return false; 
} 

public enum Genre { 
ACTION(28), 
ADVENNTURE(12), 
ANIMATION(16), 
COMEDY(35), 
CRIME(80), 
DOCUMENTARY(99), 
DRAMA(18), 
FAMILY(10751), 
FANTASY(14), 
HISTORY(36), 
HORROR(27), 
MUSIC(10402), 
MYSTERY(9648), 
ROMANCE(10749), 
SCIENCEFICTION(878), 
TVMOVIE(10770), 
THRILLER(53), 
WAR(10752), 
WESTERN(37); 

private static final Map<Integer, Genre> map = new HashMap<>(); 

static{ 
    for(Genre g : values()){ 
     map.put(g.getId(), g); 
    } 
} 

int id; 

Genre(int id) { 
    this.id = id; 
} 

public int getId() { 
    return id; 
} 

public void setId(int id) { 
    this.id = id; 
} 

public static Genre of(Integer id){ 
    Genre result = map.get(id); 
    if(result == null){ 
     throw new IllegalArgumentException("Invalid id value: " + id); 
    } 
    return result; 
} 

}

+0

這將是因爲if語句是真實的。 究竟是什麼問題? – Ryan

+0

問題是,如果語句方法確實應該中斷,但它應該返回true。現在滿意if語句循環中斷並返回false。 – adams172

+4

if裏面的return語句確實如此。它返回true – Ryan

回答

-1

也許你應該做的是:

boolean cond = false; 
for(Genre g : genres){ 
    if(num == g.getId()){ 
     cond = true; 
     break; 
    } 
} 
return cond; 

如果你仍然得到錯誤的返回那麼你的IF條件永遠都無法滿足。