2017-03-03 83 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条件永远都无法满足。