循环陷入无限循环

时间:2011-09-16 21:24:35

标签: java loops while-loop infinite

我试图找出为什么我的程序重复打印相同的语句。当我输入好的值时,我能够使这个方法正常工作,但是我设置了一个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;
}

3 个答案:

答案 0 :(得分:2)

第一次调用它时,它会强制您提供有效的列和行号;方块将被设置,turnTaker将递增,循环将终止。

第二次调用它时,如果选择的行号和列号相同,则turnTaker递增,因为数组中选择的点不是0。 validRowvalidCol不是0,此外,它永远不会要求您提供更多数字 - 它会进入无限循环打印消息而不会再次提示!

打印邮件的“else”子句可以通过再次将validRowvalidCol设置为0来解决此问题。正如其他人所指出的那样,如果这些变量和turnTaker也是布尔值,而不是整数,会好得多。

答案 1 :(得分:1)

你的代码难以辨认但如果我不得不猜测我会说你没有在你的其他声明中改变turnTaker。无限循环!

答案 2 :(得分:0)

您没有更改turnTaker的值,因此它始终保持为零。