2017-06-21 11 views
0

私は解決策を見つけるために、あるいは少なくとも正しい方向に私を指すのに苦労...ここ検索ArrayListオブジェクト:オブジェクトの

は私のArrayListです:本は=新しいArrayListを();

タイトル(文字列)を含むブックのオブジェクトを検索する必要があります。ここに私が持っているものがあります..

問題は、2番目のステートメントが見つからない場合にのみ印刷したいということです。しかし、リスト内の各オブジェクトを検索するときに印刷されているようです。方法はsearchBookInCollection()は、本や名前か何かを返すことが期待されていると言うので、それはboolean型を持っている

public void searchBookInCollection(String title) 
{ 
    for (Book book : books) 
    { 
     if(book.getTitle().equalsIgnoreCase(title)) 
     { 
      book.displayBookInformation(); 
     } 
     else 
     { 
      System.out.println("Nope we don't have it"); 
     } 
    } 
} 

答えて

2

変更がフラグ

public void searchBookInCollection(String title) 
{ 
     boolean found = false; 
     for (Book book : books) 
     { 
      if(book.getTitle().equalsIgnoreCase(title)) 
      { 
       book.displayBookInformation(); 
       found = true; 
       break; // no point to keep going? 
      } 
     } 
     if (!found) 
     { 
      System.out.println("Nope we don't have it"); 
     } 
} 
+0

ありがとうございます。私は2番目の声明のためにそれぞれのために外側を見ることを考慮しなかったと思います。私の先生は、ほとんどの状況でループが壊れてしまうようにする必要があるため、ブレークを使用しないこと(ケースステートメント以外)について言及していますか?彼らの意味を理解していますか? – Blackbox10101

+0

*それらが何を意味するのか理解していますか? 'while'ループや標準の' for'を使ってループしている場合、 'terminating'条件を設定するだけで' break 'にします。 'while(!found)'しかしfor-each型のforを使うと、どのようにコード化したのが良いのでしょうか。 –

+0

@ Michael-Markidis編集のおかげで –

0

を見つけました。これは代替ソリューションを提供します。

public String findBook(String title) { // "InCollection" does not help end user, "find" follows standard naming convention 
    for (String book : books) { 
     if (book.equalsIgnoreCase(title)) { 
      return book; // This is debated, if you want "one return" here, use temporary variable. 
     } 
    } 
    throw new NoSuchElementException("Title was not found!"); // Throw gives the end user a chance to handle the exception. 
} 
関連する問題