2015-05-20 31 views
0

我正在開發一個程序來玩Go Fish遊戲。在循環一遍之後,除scan.next()之外的所有內容都可以工作。scan.next()不在循環內工作

那麼,有時它有效,有時它不。這裏是代碼:

System.out.println(compHand.showHand());  

while (!(deck.isEmpty())) { 
    y = 0; 

    while (x == 1) {    

     System.out.println("\nYour hand:" + userHand.showHand()+ "\nYour turn. What number do you want to match?"); 
     guess = scan.next(); 
     if (compHand.checkHand(guess)) { 
      System.out.println("Darn...here you go."); 
      userHand.removeNum(guess); 
      compHand.removeNum(guess); 
      userHand.showHand(); 
      uP++; 
     } 
     else { 
      System.out.println("Nope! Type '1' to go fish!"); 
      y = scan.nextInt(); 
      if (y == 1) { 
       userHand.goFish(); 
       System.out.println(userHand.showHand()); 
      } 
      y = 0; 
     } 

     guess = ""; 
     x--; 
    } 

    while (x == 0) { 
     System.out.println("Do you have any " + compHand.ask() + "s?"); 
     ans = scan.next(); 
      if (!(ans.contains("go"))) { 
       System.out.println("Yay!"); 
       userHand.removeNum(ans); 
       compHand.removeNum(ans); 
       cP++; 
       x++; 
      } 
      else { 
       System.out.println("Aww...darn."); 
       compHand.goFish(); 
       x++; 
      } 
     } 

     System.out.println("Computer's points so far: " + cP + "\nYour points so far: " + uP + "\n"); 
    }   
} 

因此,它第一次循環執行用戶的手,它的工作原理。然後它適用於電腦,但如果電腦必須去釣魚。當它循環回用戶的手時,它跳過guess = scan.next();。 我不知道該怎麼辦...

+3

'scan.next()'在什麼情況下會失敗?成功的時候有什麼不同? – user1666620

+0

僅供參考 - 我重新格式化了代碼,因爲您應該選擇一種縮進/支架樣式並堅持使用它,而不是使用兩種不同的樣式。 – JNYRanger

+1

您是否使用過調試器來遍歷代碼並準確查看哪些行正在執行?它真的幫助解決這些類型的問題。另外,當這種跳過發生時,是否打印出「你的手......」文本?如果不是,那麼很可能是因爲在評估循環條件時'x!= 1'。 – JNYRanger

回答

-1

問題來自緩衝區。你必須免費它。爲此,請在循環的右括號之前放置一個scan.nextLine(),它將釋放緩衝區。您將可以輸入一個輸入。

+0

所以'removeNum'方法可以同時處理'String'和'int'嗎?你怎麼知道? – Tom

+0

我不明白你的問題。我建議您添加的scan.nextLine()必須添加以釋放緩衝區。 –

+0

那麼請解釋一下,爲什麼OP應該用'nextInt()'代替'next()'? 'nextLine()'只是必要的,因爲你建議使用'nextInt()'。 – Tom