1

私はプログラミングが初めてです。私はこのコードを持っています:

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

より具体的には、リストを検索して、これと同じ名前の映画が含まれているかどうかを確認したいと思います。何か案は ?どうもありがとう。

4

4 に答える 4

1

aFilmforループ内で印刷する必要がある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");
}
于 2012-11-25T12:50:23.687 に答える
1

aFilm変数は for ループで定義されます。したがって、そのスコープはループに限定され、変数はループの外では使用できません。このループを次のように書き直すことができます。

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 {
    ...
}
于 2012-11-25T12:52:15.817 に答える
0

マップのようなデータ インデックスの使用:

SortedMap< String, Film > filmsByTitle = new TreeMap<>();
...
if( ! filmsByTitle.contains( newFilm.getTitle()) {
   filmsByTitle.put( newFilm.getTitle(), newFilm );
}
于 2012-11-25T12:53:15.343 に答える
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さらに、 (映画、タイトルなど)を防御的にチェックすることをお勧めします。例を単純にするために、チェックアウトを省略しました。

于 2012-11-25T13:13:51.560 に答える