Java 为什么赢了';我的while循环是否正常工作?

Java 为什么赢了';我的while循环是否正常工作?,java,Java,我的checkWin方法返回false,直到在我的棋盘阵列中水平、垂直或对角地将4个“棋子”排成一行,在Connect 4游戏中出现赢家。一旦有了赢家,checkWin方法将返回true,最近的if语句将迭代,打印赢家,然后终止整个循环(如果我正确编码的话)。但是,当我运行程序时,while循环只迭代一次,接受一个red输入,声明red-won,然后对yellow执行相同的操作,然后终止。 我错过了什么? 以下是相关代码。 多谢各位 public static void main(String[

我的
checkWin
方法返回
false
,直到在我的棋盘阵列中水平、垂直或对角地将4个“棋子”排成一行,在Connect 4游戏中出现赢家。一旦有了赢家,
checkWin
方法将返回true,最近的if语句将迭代,打印赢家,然后终止整个循环(如果我正确编码的话)。但是,当我运行程序时,while循环只迭代一次,接受一个red输入,声明red-won,然后对yellow执行相同的操作,然后终止。
我错过了什么?
以下是相关代码。
多谢各位

public static void main(String[] args) {
    char[][] board = new char[6][7];
    boolean loop = true;
    // loop to alternate players until there's a winner
    while (loop) {
        printData(board);
        red(board);
        if (checkWin(board) == true) {
            printData(board);
            System.out.print("Red wins!");
            loop = false;
        }
        printData(board);
        yellow(board);
        if (checkWin(board) == true) {
            printData(board);
            System.out.print("Yellow wins!");
            loop = false;
        }
    }
}

public static void printData(char[][] tbl) {
    for (int r = 0; r < tbl.length; r++) {
        for (int c = 0; c < tbl[r].length; c++) {
            if (tbl[r][c] == 0) {
                System.out.print("| ");
            } else {
                System.out.print("|" + tbl[r][c]);
            }
        } // end for col loop
        System.out.println("|");
    } // end for row loop
    System.out.println("---------------");
} // end printData method

public static void red(char[][] f) {
    System.out.println("Place a red checker at column (0-6)");
    Scanner in = new Scanner(System.in);
    int c = in.nextInt();
    for (int i = 5; i >= 0; i--) {
        if (f[i][c] == 0) {
            f[i][c] = 'R';
            break;
        }
    }
}

public static void yellow(char[][] f) {
    System.out.println("Place a yellow checker at column (0-6)");
    Scanner in = new Scanner(System.in);
    int c = in.nextInt();
    for (int i = 5; i >= 0; i--) {
        if (f[i][c] == 0) {
            f[i][c] = 'Y';
            break;
        }
    }
}

// Method to check for a winner. Receives 2-D array as parameter. Returns
// boolean value.
public static boolean checkWin(char[][] b) {
    // Create four boolean variables, one for each set of rows. Initialize
    // all of them to false.
    boolean foundRow = false;
    boolean foundCol = false;
    boolean foundMjrD = false;
    boolean foundMinD = false;

    // Check to see if four consecutive cells in a row match.
    // check rows
    for (int r = 0; r <= 5; r++) {
        for (int c = 0; c <= 3; c++) {
            if (b[r][c] == b[r][c + 1] && b[r][c] == b[r][c + 2] && b[r][c] == b[r][c + 3] && b[r][c] != ' ') {
                foundRow = true;
                break;
            }
        }
    }

    // Check to see if four columns in the same row match
    // check columns
    for (int r = 0; r <= 2; r++) {
        for (int c = 0; c <= 6; c++) {
            if (b[r][c] == b[r + 1][c] && b[r][c] == b[r + 2][c] && b[r][c] == b[r + 3][c] && b[r][c] != ' ') {
                foundCol = true;
                break;
            }
        }
    }

    // Check to see if four diagonals match (top left to bottom right)
    // check major diagonal
    for (int r = 0; r <= 2; r++) {
        for (int c = 0; c <= 3; c++) {
            if (b[r][c] == b[r + 1][c + 1] && b[r][c] == b[r + 2][c + 2] && b[r][c] == b[r + 3][c + 3]
                    && b[r][c] != ' ') {
                foundMjrD = true;
                break;
            }
        }
    }

    // Check to see if four diagonals in the other direction match (top
    // right to bottom left)
    // check minor diagonal
    for (int r = 0; r <= 2; r++) {
        for (int c = 3; c <= 6; c++) {
            if (b[r][c] == b[r + 1][c - 1] && b[r][c] == b[r + 2][c - 2] && b[r][c] == b[r + 3][c - 3]
                    && b[r][c] != ' ') {
                foundMinD = true;
                break;
            }
        }
    }

    // If ONE of the booleans is true, we have a winner.
    // checks boolean for a true
    if (foundRow || foundCol || foundMjrD || foundMinD)
        return true;
    else
        return false;
} // end checkWin method
publicstaticvoidmain(字符串[]args){
字符[][]板=新字符[6][7];
布尔循环=真;
//循环到其他玩家,直到有赢家
while(循环){
打印数据(板);
红(板);;
if(checkWin(board)=真){
打印数据(板);
系统输出打印(“红色胜利!”);
循环=假;
}
打印数据(板);
黄色(板);
if(checkWin(board)=真){
打印数据(板);
系统输出打印(“黄色胜利!”);
循环=假;
}
}
}
公共静态void打印数据(字符[][]待定){
对于(int r=0;r=0;i--){
如果(f[i][c]==0){
f[i][c]=‘R’;
打破
}
}
}
公共静态无效黄色(字符[][]f){
System.out.println(“在列(0-6)处放置一个黄色复选框”);
扫描仪输入=新扫描仪(系统输入);
int c=in.nextInt();
对于(int i=5;i>=0;i--){
如果(f[i][c]==0){
f[i][c]=“Y”;
打破
}
}
}
//方法来检查是否有获胜者。接收二维数组作为参数。退换商品
//布尔值。
公共静态布尔checkWin(char[][]b){
//创建四个布尔变量,每组行一个。初始化
//所有这些都是假的。
布尔foundRow=false;
布尔值foundCol=false;
布尔foundMjrD=false;
布尔值=false;
//检查一行中的四个连续单元格是否匹配。
//检查行

对于(int r=0;r,根据我通过调试代码所分析的,在将布尔变量切换为false之后,您没有将其设置为“true”。在您脱离条件之后,请再次将该布尔变量设置为“true”


希望这对您有所帮助。快乐编码

您应该仔细看看这一行:

if (b[r][c] == b[r][c + 1] && b[r][c] == b[r][c + 2] && b[r][c] == b[r][c + 3] && b[r][c] != ' ') {

你检查
b[r][c]!=''
,但是你从来没有在
char[][]board
中加空格,因此board[?][?]中的默认值是0。

你能不能只发布简短描述有问题的代码,而不是整个内容?b[r][c]!=''为什么要检查空间?不应该改为检查''或0吗?这就解释了!非常感谢您的帮助!