java - 代码运行良好,直到最后一个 else if 语句(使用 != 'R' 等)当我运行代码来测试该语句时,代码无法运行

制作一个 connect4 游戏,所以这只是逻辑的一部分 - 没有浮动块,没有无效字母(块 - 只有 R 和 Y 可接受)'。代表一个空白。

boolean arrayCheck = false;
    do {
        for (int j = 0; j < connect4Board[0].length; j++) {
            for (int i = 0; i < connect4Board.length - 1; i++) {
                if ((connect4Board[i][j] == 'R') || (connect4Board[i][j] == 'Y')) {
                    if ((connect4Board[i + 1][j] == '.') || (connect4Board[i + 1][j] == 0)) {
                        return arrayCheck; //makes sure a gap underneath is not present and seen as a floating piece
                 } 
                    else if ((connect4Board[i + 1][j] == 'R') || (connect4Board[i + 1][j] == 'Y')) {
                                i++;
                    }
                } 
                else if ((connect4Board[i][j] == '.') || (connect4Board[i][j] == 0)) {
                    if ((connect4Board[i + 1][j] == 'R') || (connect4Board[i + 1][j] == 'Y') || connect4Board[i + 1][j] == '.' || (connect4Board[i + 1][j] == 0)) {
                        i++;
                }   else {
                        return arrayCheck;
                    }
                }
                else if((connect4Board[i][j] != 'R') && (connect4Board[i][j] != 'Y') && (connect4Board[i][j] != '.')) {
                    return arrayCheck; //where it all goes wrong. code bugs out and doesn't output anything (should output true or false) but the console just stays empty.
            }
            i--;
        }
        j++;
        }
    } while (arrayCheck);

我不知道问题是由于 do-while 循环还是 if 语句本身。我试图将 if 语句放在循环的开头、循环之外和结尾,但无论我把它放在哪里,问题似乎都是一样的。控制台保持空白(保持运行而不继续任何其他操作)。我应该怎么办?

回答1

1.检查是否有效空间

第一个 if 检查它是否是一个有效的空间,如果不是,它将返回 false 并作为结果结束循环。

2.检查浮片

然后您可以检查它们是否有效

最后你有 i--; 你需要这样做吗?

i++i-- 或两者都不是?因为您已经为每个嵌套的 if 递增。

调试

为了帮助调试您的代码,请尝试使用 System.out.println(i);Notice 打印 i 会发生什么情况。循环是否创建了无限循环?

例子

我将数组创建为:

char[][] connect4Board = {{'R','.','.','.','.'},{'T','.','.','.','.'},{'R','.','.','.','.'},{'R','.','.','.','.'}};

这可能是计数器 i 是如何递增的吗?这对我有用..

boolean arrayCheck = false;
    do {
        for (int j = 0; j < connect4Board.length; j++) {
            for (int i = 0; i < connect4Board.length - 1; i++) {
                
                /*1. Check if valid space*/
                if ((connect4Board[i][j] != 'R') && (connect4Board[i][j] != 'Y') && (connect4Board[i][j] != '.'))
                    return arrayCheck;

                /*2. Check for floating piece*/
                if ((connect4Board[i][j] == 'R') || (connect4Board[i][j] == 'Y'))
                    if ((connect4Board[i + 1][j] == '.') || (connect4Board[i + 1][j] == 0))
                        return arrayCheck; 
                    else if ((connect4Board[i + 1][j] == 'R') || (connect4Board[i + 1][j] == 'Y'))
                        i++;
                
                if ((connect4Board[i][j] == '.') || (connect4Board[i][j] == 0))
                    if ((connect4Board[i + 1][j] == 'R') || (connect4Board[i + 1][j] == 'Y') || connect4Board[i + 1][j] == '.' || (connect4Board[i + 1][j] == 0))
                        i++;
                    else
                        return arrayCheck;

            //Do you need to increment?
            // i++; Or i--;
            }
            j++;
        }
    } while (arrayCheck);

    return true;
}

相似文章