井字游戏程序循环问题 [英] Tic Tac Toe Program Loop Problems

查看:73
本文介绍了井字游戏程序循环问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我注意到当您为TicTacToe表输入错误的数字时,我的程序输出无效动作".是什么原因造成的?我只使用过一次move(row,col)方法,因此它不应重复两次Invalid Input.

I've noticed that my program outputs "Invalid move" when you put in an incorrect number for the TicTacToe table. What would cause this? I only use my move(row, col) method once so it shouldn't repeat Invalid Input twice.

我一直在构建Tic Tac Toe程序,相信我已经完成了99.9%.我无法找出一个讨厌的循环,并且我已经添加了一段时间以尝试修复它.我认为这只是我似乎无法注意到的一个小愚蠢的错误.

I've been constructing a Tic Tac Toe program and I'm 99.9% done I believe. There is one pesky loop that I cannot figure out, and I've been adding things for a while to try and fix it. I think it's just a small dumb mistake I can't seem to notice by myself.

无论如何,问题出在我完成游戏并输入Yes之后,程序终止并结束.可能是由于我将while循环放入另一个do while循环而导致的,所以我可以中断它,然后立即回到它.

Anyway the problem is once I completed a game and type Yes the program terminates and ends. What could be causing this since I put my while loop inside of another do while loop so I could break out of it and then just go back into it right away.

这是我的全部代码.

import java.util.Scanner;

public class TicTacToe {

// These two variables are for placing the X's and O's in the TicTacToe
// table.
static int row;
static int col;

// This array is for the TicTacToe table.
static char[][] table = new char[3][3];

// This is for ending the while statement that controls the game
static boolean continuePlaying = true;
static boolean quitGame = false;

// These will store the names for player 1 and 2
static String p1;
static String p2;

// This variable is to count the number of games played
static int gamesCounter = 0;

// This variable is to count the number of moves
static int moveCounter = 0;

// These two variables are to keep track of the wins each player has
static int p1Wins = 0;
static int p2Wins = 0;

static void clearTable() {
    for (int i = 0; i < table.length; i++) {
        table[0][i] = ' ';
        table[1][i] = ' ';
        table[2][i] = ' ';

    }
}

// This method will determine if the game is a tie.
static boolean checkTie() {
    for (int i = 0; i < table.length; i++) {
        for (int j = 0; j < table[i].length; j++) {
            if (table[i][j] == ' ') {
                return false;
            }
        }
    }
    return true;
}

// This is my displayTable() method. This will show the table and the X's or
// O's each player has played
static void displayTable() {
    System.out.println("  0  1  2");
    System.out.println("0[" + table[0][0] + "][" + table[0][1] + "]["
            + table[0][2] + "]");
    System.out.println("1[" + table[1][0] + "][" + table[1][1] + "]["
            + table[1][2] + "]");
    System.out.println("2[" + table[2][0] + "][" + table[2][1] + "]["
            + table[2][2] + "]");
}

// This is my move(int row,int col) method. This will record the moves each
// player takes and insert X's or O's depending on which player
static boolean move(int row, int col) {
    // This if statement will return false if the user enters in coordinates
    // outside the 3x3 zone.
    if (row > 2 || row < 0) {
        System.out.println("Invalid move.");
        return false;
    }
    // This if statement checks if the array already has an X or O in the
    // chosen space. If the array is already filled it will return false.
    else if (table[row][col] == 'X' || table[row][col] == 'O') {
        System.out.println("Not available.");
        return false;
    } else
        return true;
}

// This is my checkRow method. It checks for 3 X's or O's in a row. If there
// are 3 in a row it will return true, if not, it returns false.
static boolean checkRow(int row) {
    if ((table[row][0] & table[row][1] & table[row][2]) == 'X')
        return true;
    if ((table[row][0] & table[row][1] & table[row][2]) == 'O')
        return true;
    else
        return false;
}

// This is my checkCol method. It checks for 3 X's or O's in a row. If there
// are 3 in a row it will return true, if not, it returns false.
static boolean checkCol(int col) {
    if ((table[0][col] & table[1][col] & table[2][col]) == 'X')
        return true;
    if ((table[0][col] & table[1][col] & table[2][col]) == 'O')
        return true;
    else
        return false;
}

// This is my checkDiagonal method. It checks for 3 X's or O's in a row. If
// there are 3 in a row it will return true, if not, it returns false.
static boolean checkDiagonal() {
    if ((table[0][0] & table[1][1] & table[2][2]) == 'X')
        return true;
    if ((table[2][0] & table[1][1] & table[0][2]) == 'X')
        return true;
    if ((table[0][0] & table[1][1] & table[2][2]) == 'O')
        return true;
    if ((table[2][0] & table[1][1] & table[0][2]) == 'O')
        return true;
    else
        return false;
}

// This is my checkWinner method. It runs all the other checks to see if
// anyone won.
// If there is a winner the method returns true. If there is no winner yet,
// the method returns false.
static boolean checkWinner() {
    if (checkRow(0) == true)
        return true;
    if (checkRow(1) == true)
        return true;
    if (checkRow(2) == true)
        return true;
    if (checkCol(0) == true)
        return true;
    if (checkCol(1) == true)
        return true;
    if (checkCol(2) == true)
        return true;
    if (checkDiagonal() == true)
        return true;
    else
        return false;
}

public static void main(String[] args) {
    // The Scanner for asking each player's names
    Scanner s = new Scanner(System.in);

    // The beginning structure of the TicTacToe program
    System.out.println("TicTextToe");
    System.out.print("Name of player 1: ");
    p1 = s.nextLine();

    // Asks for Player 2's name
    System.out.print("Name of player 2: ");
    p2 = s.nextLine();

    do {

        // The TicTacToe table set up, coordinates provided around the
        // squares
        // The displayTable() method will be used to display the table here.
        while (continuePlaying == true) {
            displayTable();
            System.out.print("Player " + p1 + ":");
            row = s.nextInt();
            col = s.nextInt();
            move(row, col);

            // This will display the table again and ask for proper
            // coordinates.
            while (move(row, col) == false) {
                displayTable();
                System.out.println("Player " + p1 + ":");
                row = s.nextInt();
                col = s.nextInt();
                move(row, col);
            }

            // This inputs the X into the table if move(row, col) returns
            // true.
            if (move(row, col) == true) {
                moveCounter++;
                table[row][col] = 'X';
            }

            // This will check if p1 just won the game or if the game needs
            // to
            // continue
            checkRow(0);
            // System.out.println(checkRow(0)); //This prints out if row 0
            // is
            // true or false
            checkRow(1);
            // System.out.println(checkRow(1)); //This prints out if row 1
            // is
            // true or false
            checkRow(2);
            // System.out.println(checkRow(2)); //This prints out if row 2
            // is
            // true or false
            checkCol(0);
            // System.out.println(checkCol(0)); //This prints out if column
            // 0 is
            // true or false
            checkCol(1);
            // System.out.println(checkCol(1)); //This prints out if column
            // 1 is
            // true or false
            checkCol(2);
            // System.out.println(checkCol(2)); //This prints out if column
            // 2 is
            // true or false
            checkDiagonal();
            // System.out.println(checkDiagonal()); //This prints out true
            // or
            // false depending on the diagonals
            checkWinner();
            // System.out.println(checkWinner()); //This prints out if
            // checkWinner is true or false. If it's true the while loop
            // should
            // end

            // This will check if there is a tie
            // checkTie();
            if (moveCounter == 9) {
                displayTable();
                System.out.println("It's a tie!");
                gamesCounter++;
                clearTable();
                moveCounter = 0;
                System.out.println("Another Game? Yes/No :");
                String answer = s.next();
                if (answer.equals("Yes")) {
                    break;
                }
                if (answer.equals("No")) {
                    continuePlaying = false;
                    clearTable();
                    System.out.println("Statistics:");
                    System.out.println(p1 + p1Wins + "/" + gamesCounter);
                    System.out.println(p2 + p2Wins + "/" + gamesCounter);
                    quitGame = false;
                    break;
                }
            }

            if (checkWinner() == true) {
                displayTable();
                System.out.println("Player " + p1 + " wins!");
                gamesCounter++;
                p1Wins++;
                clearTable();
                moveCounter = 0;
                System.out.println(p1 + " " + p1Wins + "/" + gamesCounter);
                System.out.println(p2 + " " + p2Wins + "/" + gamesCounter);
                System.out.println("Another game? Yes/No :");
                String answer = s.next();
                if (answer.equals("Yes")) {
                    break;
                } else if (answer.equals("No")) {
                    continuePlaying = false;
                    System.out.println("Statistics:");
                    System.out.println(p1 + p1Wins + "/" + gamesCounter);
                    System.out.println(p2 + p2Wins + "/" + gamesCounter);
                    quitGame = false;
                    break;
                }
            }

            displayTable();
            System.out.print("Player " + p2 + ":");
            row = s.nextInt();
            col = s.nextInt();
            move(row, col);

            // This will display the table again and ask for proper
            // coordinates.
            while (move(row, col) == false) {
                displayTable();
                System.out.println("Player " + p2 + ":");
                row = s.nextInt();
                col = s.nextInt();
                move(row, col);
            }

            // This inputs the O into the table if move(row, col) returns
            // true.
            if (move(row, col) == true) {
                moveCounter++;
                table[row][col] = 'O';
            }

            // This will check if p2 just won the game or if the game needs
            // to
            // continue
            // checkRow(0);
            // System.out.println(checkRow(0)); //This prints out if row 0
            // is
            // true or false
            checkRow(1);
            // System.out.println(checkRow(1)); //This prints out if row 1
            // is
            // true or false
            checkRow(2);
            // System.out.println(checkRow(2)); //This prints out if row 2
            // is
            // true or false
            checkCol(0);
            // System.out.println(checkCol(0)); //This prints out if column
            // 0 is
            // true or false
            checkCol(1);
            // System.out.println(checkCol(1)); //This prints out if column
            // 1 is
            // true or false
            checkCol(2);
            // System.out.println(checkCol(2)); //This prints out if column
            // 2 is
            // true or false
            checkDiagonal();
            // System.out.println(checkDiagonal()); //This prints out true
            // or
            // false depending on the diagonals
            checkWinner();
            // System.out.println(checkWinner()); //This prints out if
            // checkWinner is true or false. If it's true the while loop
            // should
            // end

            // This will check if there is a tie
            // checkTie();
            if (moveCounter == 9) {
                displayTable();
                System.out.println("It's a tie!");
                gamesCounter++;
                clearTable();
                moveCounter = 0;
                System.out.println("Another Game? Yes/No :");
                String answer = s.next();
                if (answer.equals("Yes")) {
                    break;
                }
                if (answer.equals("No")) {
                    continuePlaying = false;
                    clearTable();
                    System.out.println("Statistics:");
                    System.out.println(p1 + p1Wins + "/" + gamesCounter);
                    System.out.println(p2 + p2Wins + "/" + gamesCounter);
                    quitGame = false;
                    break;
                }
            }

            if (checkWinner() == true) {
                displayTable();
                System.out.println("Player " + p2 + " wins!");
                gamesCounter++;
                p2Wins++;
                clearTable();
                System.out.println(p1 + " " + p1Wins + "/" + gamesCounter);
                System.out.println(p2 + " " + p2Wins + "/" + gamesCounter);
                System.out.println("Another game? Yes/No :");
                String answer = s.next();
                if (answer.equals("Yes")) {
                    break;
                }
                if (answer.equals("No")) {
                    continuePlaying = false;
                    clearTable();
                    System.out.println("Statistics:");
                    System.out.println(p1 + p1Wins + "/" + gamesCounter);
                    System.out.println(p2 + p2Wins + "/" + gamesCounter);
                    quitGame = true;
                    break;
                }

            }

        }

    } while (quitGame = false);
}
}

推荐答案

您的条件检查有效:

while (quitGame = false);

应为:

while (quitGame == false);

双等于号.

这篇关于井字游戏程序循环问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆