2011-09-16 208 views
1

我想弄清楚爲什麼我的程序反覆打印相同的語句。當我輸入好的值時,我能夠使此方法正常工作,但我設置了一個else語句來捕獲無效的選擇。當我的else語句運行時,它會無限打印,而while循環永遠不會開始。我無法弄清楚。我要粘貼整個方法,但大膽的問題領域。我希望這很清楚。雖然循環陷入無限循環

public static int[][] placeCheese(int [][] gameBoard, String Player1Name) 
{ 
    Scanner console = new Scanner(System.in); 
    int turnTaker = 0; 
    int validRow = 0; 
    int validCol = 0; 
    int RowIndex = -1; 
    int ColIndex = -1; 
    while(turnTaker == 0) 
    { 
     while(validRow == 0) 
     { 
      System.out.println(Player1Name + ", please place your cheese by choosing a row, or choose -1 to exit."); 
      RowIndex = console.nextInt() -1; 
      if(RowIndex < gameBoard.length && RowIndex >=0) 
      { 
       validRow++; 
      } 
      else if(RowIndex == -2) 
      { 
       System.out.println("Thanks for playing, " + Player1Name + " has forfeited!"); 
       System.exit(0); 
      } 
     } 
     while(validCol == 0){ 
      System.out.println(Player1Name + ", please place your cheese by choosing a column, or choose -1 to exit."); 
      ColIndex = console.nextInt() -1; 
      if(ColIndex < gameBoard.length && ColIndex >=0) 
      { 
       validCol++; 
      } 
      else if(RowIndex == -2) 
      { 
       System.out.println("Thanks for playing, " + Player1Name + " has forfeited!"); 
       System.exit(0); 
      } 
     } 
    if(gameBoard[RowIndex][ColIndex] == 0) 
    { 
     gameBoard[RowIndex][ColIndex] = 1; 
     turnTaker++; 
     numPieces1--; 
    } 
    else 
    { 
     System.out.println("this space is already occupied, please choose again."); 
    } 
    return gameBoard; 
} 
+1

請嘗試將代碼格式化爲更具可讀性的內容.. – nfechner

+0

Gah我正處於編輯過程中,它不允許我保存它。 –

+0

如果在調試進入無限循環時進行調試,您會看到什麼?這個工具可能會幫助你解決問題,因爲這是它的目的。 –

回答

2

第一次調用它時,它會強制你提供有效的列和行號;廣場將被設置,turnTaker將被遞增,並且循環將終止。

這被稱爲第二次,如果選擇的行數和列數是相同的,然後將turnTaker遞增,因爲在陣列中所選擇的點不爲0。由於validRowvalidCol不爲0,此外,它永遠不會要求你輸入更多的數字 - 它將進入無限循環打印消息而不會再次提示!

打印該消息的「其他」子句可以通過將validRowvalidCol再次設置爲0來解決此問題。正如其他人指出的那樣,如果這些變量和turnTaker也是布爾值,而不是整數,會更好。

+0

的其餘部分,我只注意到了同樣的事情。謝謝! – madamsmall

+0

所以,也許upvote /接受,因爲我花時間? –

+0

噢抱歉不知道該怎麼做,會想出來:) – madamsmall

0

你沒有改變turnTaker的價值,所以它會一直保持爲零。

+0

哦,哎呀!我在編輯之前發佈了這個,現在我看到代碼 – CamelBlues

1

你的代碼是難以辨認的,但如果我不得不猜測,我會說你沒有改變你的陳述中的turnTaker。無限循環!