开发者

While loop getting stuck in infinite loop

开发者 https://www.devze.com 2023-04-05 05:46 出处:网络
I am trying to figure out why my program is printing the same statement repeatedly. I am able to get this method to work fine when I am putting in good values, but I have an else statement set up to c

I am trying to figure out why my program is printing the same statement repeatedly. I am able to get this method to work fine when I am putting in good values, but I have an else statement set up to catch invalid selections. When my else statement runs, it prints infinitely and the while loop never commences. I can't figure it out. I am going to paste the entire method, but bold the problem area. I hope this is clear.

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 playi开发者_如何转开发ng, " + 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;
}


The first time this is called, it will force you to provide valid column and row numbers; the square will get set, turnTaker will be incremented, and the loop will terminate.

The second time this is called, if the row and column numbers chosen are the same, then turnTaker will not be incremented because the chosen spot in the array is not 0. Since validRow and validCol aren't 0, furthermore, it will never ask you for more numbers -- it will just go into an endless loop printing the message without ever prompting again!

Your "else" clause that prints the message could fix this by setting validRow and validCol to 0 again. As someone else has pointed out, it would be much better if these variables and turnTaker as well were booleans, not ints.


Your code is illegible but if I had to guess I'd say you weren't changing turnTaker in your else statement. Infinite loop!


You're not changing the value of turnTaker, so it will always stay zero.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号