我是编程新手。我有这段代码:
public void findFilm ( String nameofFilm ) {
int index = -1;
int i = 0;
for( Film aFilm : list ) {
if( aFilm.gettitle().equals( nameofFilm )) {
index = i;
i++;
break ;
}
}
if( index >= 0 ) {
aFilm.print();
}
else {
System.out.println(
"The film " + nameofFilm + " does not belong to the collection" );
}
}
更具体地说,我想搜索列表并查找它是否包含名称与此i插入相同的电影。有任何想法吗 ?非常感谢。
答案 0 :(得分:1)
aFilm
只是你需要在for循环中打印它的for循环的本地。
public void findFilm ( String nameofFilm ) {
for( Film aFilm : list ) {
if( aFilm.gettitle().equals(nameofFilm) ) {
aFilm.print();
return;
}
}
System.out.println(
"The film " + nameofFilm + " does not belong to the collection");
}
答案 1 :(得分:1)
{for}循环中定义了aFilm
变量。因此它的范围仅限于循环,并且变量不能在循环外使用。你可以用这种方式重写循环:
Film foundFilm = null;
for (Film aFilm : films) {
if (aFilm.getTitle().equals(nameOfFilm)) {
foundFilm = aFilm;
break;
}
}
if (foundFilm == null) {
...
}
else {
...
}
无需任何索引或递增计数器。
并且,为了使代码更清晰,您可以将第一部分提取到自己的方法中,并像这样重写它:
Film foundFilm = findFilmByTitle(films, filmTitle);
if (foundFilm == null) {
...
}
else {
...
}
答案 2 :(得分:0)
使用像地图这样的数据索引:
SortedMap< String, Film > filmsByTitle = new TreeMap<>();
...
if( ! filmsByTitle.contains( newFilm.getTitle()) {
filmsByTitle.put( newFilm.getTitle(), newFilm );
}
答案 3 :(得分:0)
您可以选择功能性方法,例如通过Guava:
public boolean containsFilm(List<Film> list, final String nameOfFilm) {
Film film = Iterables.find(list, new Predicate<Film>() {
@Override
public boolean apply(Film film) {
return film.getTitle().equals(nameOfFilm);
}
}, null);
return film != null;
}
另外,我会建议防御性地检查null
(电影,标题等)。我离开了支票以保持示例简单。