2017-07-21 5 views
1

私は他のすべてのアプリケーションでループしていますが、これはうまく動作しません。ブールループは偽を設定しません

public void loanBook() { 
    boolean loop3 = true; 
    System.out.println("So you wanna loan a book? Excellent choice."); 
     while (loop3) { 
      for (int i=0; i<books.size(); i++) { 

       System.out.println("Search for the book you're looking for: "); 
       String book = in.nextLine(); 

       if (books.get(i).toString().contains(book) == true) { 
        System.out.println("Looking for: " + books.get(i).toString() + "?"); 
        System.out.println("press y to loan book or n to try again"); 
        String choice1 = in.next(); 
        if (choice1.equalsIgnoreCase("y")) { 
         for (int j=0; j<customers.size(); j++) { 
          if (customers.get(j).getSignedIn() == true) { 
           customers.get(j).booksLoaned.add(books.get(i)); 
           Timer.delayFunction(); 
           System.out.println(customers.get(j).printBookList()); 
           System.out.println("Returning to main menu"); 
         ----> loop3 = false; doesnt work for some reason  
          } 
         } 
        } 
       } 
      } 
     System.out.println("Couldnt find book"); 
     } 
    } 

私はfalseに設定してもループ3を繰り返し続けます。後でメインメニューに戻りますが、それはもうありません。

問題を特定しようとしましたが、問題はありませんでした。私は1時間のコードを見てきました。私は何の問題も見つけられません。誰かが手がかりを得た?

働い孤立問題:

public void loanBook() { 
    boolean loop = true; 
    while (loop) { 
     System.out.println("lol"); 
-----> loop = false; works fine 
    } 
    System.out.println("lol"); 
} 

私のシステムのうちプリントはので、私はそれが正しく私のループを通じて取得します知っているうまく動作します。

+0

これをfalseに設定するとtrueですが、whileループを終了するまで両方のループを通過するまで待つ必要があります。一度それをfalseに設定すると、 'break;することができますforループ – XtremeBaumer

+0

は、forループよりも顧客のインデックスに簡単にアクセスできますか?多くのループが一つのメソッドを追加するだけです。 – ITGuru

+0

メソッドのパラメータとして現在の顧客を渡すことができます – XtremeBaumer

答えて

1

3つのネストループがあります。他のループ(whileループ)はloop3falseになると終了します。

ただし、forループ2の内側が終了するまでwhileループはloop3の値をチェックしないことを意味し、最も内側のループ内の深いfalseloop3を設定しています。

すべてのループを中断したい場合は、いくつかのbreak文や条件が必要です。例えば:loop3が偽となった場合

while (loop3) { 
     for (int i=0; i<books.size() && loop3; i++) { 

      System.out.println("Search for the book you're looking for: "); 
      String book = in.nextLine(); 

      if (books.get(i).toString().contains(book)) { 
       System.out.println("Looking for: " + books.get(i).toString() + "?"); 
       System.out.println("press y to loan book or n to try again"); 
       String choice1 = in.next(); 
       if (choice1.equalsIgnoreCase("y")) { 
        for (int j=0; j<customers.size() && loop3; j++) { 
         if (customers.get(j).getSignedIn()) { 
          customers.get(j).booksLoaned.add(books.get(i)); 
          Timer.delayFunction(); 
          System.out.println(customers.get(j).printBookList()); 
          System.out.println("Returning to main menu"); 
          loop3 = false;  
         } 
        } 
       } 
      } 
     } 
     System.out.println("Couldnt find book"); 
    } 

これは、外側のループは直ちに終了することを可能にするであろう、内部ループの両方を残します。

+0

"本"を探しています。私のすべての本のために、本当にユーザーからのスキャンされた入力を含むものだけを見つけるべきです。私のcontainsメソッドが間違っている可能性がありますので、(books.get(i).toString()。contains(book)== true)なら、それは一度だけですが、 に入りますか? – ITGuru

+0

@GustavBangNielsen forループに追加した条件に気がつきましたか? – Eran

+0

ah && loop3、genius。私はそれを試してみましょう:) – ITGuru

0

falseに設定するとすぐにwhileループから脱出する必要があります。

public void loanBook() { 
    boolean loop3 = true; 
    System.out.println("So you wanna loan a book? Excellent choice."); 
     while (loop3) { 
      outerloop: // added 
      for (int i=0; i<books.size(); i++) { 

      System.out.println("Search for the book you're looking for: "); 
      String book = in.nextLine(); 

      if (books.get(i).toString().contains(book) == true) { 
       System.out.println("Looking for: " + books.get(i).toString() + "?"); 
       System.out.println("press y to loan book or n to try again"); 
       String choice1 = in.next(); 
       if (choice1.equalsIgnoreCase("y")) { 
        for (int j=0; j<customers.size(); j++) { 
         if (customers.get(j).getSignedIn() == true) { 
          customers.get(j).booksLoaned.add(books.get(i)); 
          Timer.delayFunction(); 
          System.out.println(customers.get(j).printBookList()); 
          System.out.println("Returning to main menu"); 
          loop3 = false; 
          break outerloop; // added  
         } 
        } 
       } 
      } 
     } 
    System.out.println("Couldnt find book"); 
    } 
} 
関連する問題