2017-12-14 13 views
-1

私は、メンバーがユーザが指定したタイトルと著者を持つブックオブジェクトを取り出すことを可能にする 'ライブラリ'クラス内のメソッドを実装しようとしています。最初に、タイトル&の著者と一致する書籍を探して、メンバーがまだその書籍を貸し出していないことを確認します。ここで私のメソッドのコードは、私が間違っている場所を教えてください。 borrowBookと(memberName.getBooks(あれば)私はこのコードのブロックでそれらを使用する場合しかし、彼らが実行していないようだ、独立して(...)メソッドの両方の作業が含まれていforループ内でforループを使用するにはどうすればよいですか?私のコードは実行されますが、何もしません

public void memberBorrowBook1(Member memberName, String title2, String author2) 
{ 
    //Test each book object in the library class to see if the parameters match 
    for(Book a:books) { 
     if(a.getTitle() == title2 && a.getAuthor() == author2); { 
      //If title and author match, check to see if the member already has a copy of this book on loan 
      for(Book b:memberName.getBooks()) { 
       if(memberName.getBooks().contains(a)) { 
        System.out.println("Member already has a copy of that book loaned out"); 
       //Otherwise, loan the book out to the member 
       } else { 
        memberName.borrowBook(a); 
       } 
      } 
     } 
    } 
} 
+1

https://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java –

+0

あなたのアイデアの最も強力な機能、つまりブレークポイント –

+0

の使用を開始します。このスニペットの問題のほとんどは、 tは悪い文字列の比較のために、その理由でそれを閉じることはかなり正しくはありません。 – laune

答えて

2

これが際立っています。。:

if(a.getTitle() == title2 && a.getAuthor() == author2); { 

まず:文字列値を比較するために使用する等号()

第二:そのセミコロンを使用しないでください - ちょうど

);間)空の声明を制御している場合!その後、10

for(Book b:memberName.getBooks()) { // remove this statement 
      if(memberName.getBooks().contains(a)) { 

あなたは別のループを必要としない - それはすべてを行います含まれています。

+0

これらの改善は助けになり、コードは今すぐ使えます。ただし、同じタイトルと著者を持つ本の2つのオブジェクトを作成すると、このコードを実行すると、両方の書籍がメンバーに貸し出されます。つまり、ifステートメントは、そのメンバーが既にその本を所有しているかどうかを確認します。* if(memberName.getBooks ().contains(a)){*は動作していないようです。 – swindle

+0

通常、図書館の図書にはその図書を識別する_署名が付いています。例えばTreIsl/1とTreIsl/2は_TreasureIslandの2つのコピーになります。タイトルと作者だけがあれば、すべての兄弟コピーを見つけるために最後に 'books'を繰り返す必要がありますこれらのうちのどれかが 'memberName.getBooks()'に含まれていれば、メンバーはすでにそれを持っていることを知っています。 – laune

関連する問題