2017-11-19 6 views
0

2文字列のパラメータ(作成者、タイトル)を入力し、各ArrayListエントリをチェックするメソッドを作成しようとしています。指定されたパラメータを持つブックが存在する場合はブックを返し、存在しない場合はnullを返します。パラメータがarraylist内に存在するかどうかをチェックする方法

私のコードは、現在のようになります。

public Book checkBook(String title, String author) 
{ 
    for(Book allbooks : books) 
    { 
     if(allbooks == checkBook(title, author)) { 
      return allbooks; 
     } else { 
      System.out.println("Book does not exist"); 
     } 
    } 
    return null; 
} 

しかし、これは無限ループになります。私は当初、ループ内で 'return null'部分を持っていましたが、ループ外のreturn文がコンパイルされているようです。

ここで私は間違っていますか?

+0

'=='の代わりに '.equals'を使用します。 –

+0

無限ループにはなりません。あなたはそれが何と思いますか? –

+0

この場合、メソッドの入力と「書籍」の外観はどのようなものかを確認することが重要です。問題を実行して再現できる最小限の実行例を提供してください。 – alfasin

答えて

1

この行でif(allbooks == checkBook(title、author))あなたはcheckbookメソッドを何度も呼び出すことによって再帰をやっています。あなたのコードではタイトルと作成者を何も比較しません。 Bookクラスのタイトルと著者のゲッターメソッドを作成し、このような比較を行うと、うまく動作します。

それはこのようにはなりません。

public Book checkBook(String title, String author) 
{ 
    for(Book allbooks : books) 
    { 
     if(allbooks.getTitle().equals(title) && allbooks.getAuthor().equals(author)) { 
      return allbooks; 
     } 
    } 
    return null; 
} 

そして、それはそれを見つけることができませんまで、それはエラーメッセージを出力し続けますので、コード内の他のの必要は、まったくあり。

+0

これは私が必要としていたものです。ありがとう!私はあなたが.equals、awesomeを使って各パラメータをテストできることに気づいていませんでした。 – swindle

+0

答えにupvoteして、私に感謝する満足のいく答えとしてマークしてください。 :) –

関連する問題