在java中,if-else_if-else梯形图可以用其他方式编写吗?

3npbholx  于 2022-12-25  发布在  Java
关注(0)|答案(3)|浏览(117)

我想修改代码行的格式,因为它们看起来不太好,我想减少行数。
请告诉如何缩短或写在其他格式的以下代码

if (token[0][0] == token[0][1] && token[0][1] == token[0][2] && token[0][2] == 0)
            return true;
        else if (token[1][0] == token[1][1] && token[1][1] == token[1][2] && token[1][2] == 0)
            return true;
        else if (token[2][0] == token[2][1] && token[2][1] == token[2][2] && token[2][2] == 0)
            return true;
        else if (token[0][0] == token[1][0] && token[1][0] == token[2][0] && token[2][0] == 0)
            return true;
        else if (token[0][1] == token[1][1] && token[1][1] == token[2][1] && token[2][1] == 0)
            return true;
        else if (token[0][2] == token[1][2] && token[1][2] == token[2][2] && token[2][2] == 0)
            return true;
        else if (token[0][0] == token[1][1] && token[1][1] == token[2][2] && token[2][2] == 0)
            return true;
        else if (token[0][2] == token[1][1] && token[1][1] == token[2][0] && token[2][0] == 0)
            return true;
        else
            return false;

最好是像下面这样\

if (board[0] == getUserRole) {
            if (board[1] == getUserRole)
                if (board[2] == getUserRole)
                    return true;
            if (board[3] == getUserRole)
                if (board[6] == getUserRole)
                    return true;
            if (board[4] == getUserRole)
                if (board[8] == getUserRole)
                    return true;
        }

这将是更好的,如果它可以写在一行模式,请尝试编码它在5行(如果可能的话。)pidoss. -〉只有对角线或直线一样,在井字游戏。

3pmvbmvn

3pmvbmvn1#

看起来您具有以下检查模式:

000 ... ... 0.. .0. ..0 0.. ..0 
... 000 ... 0.. .0. ..0 .0. .0. 
... ... 000 0.. .0. ..0 ..0 0..

所以,你所能做的就是简化你的代码删除重复.

public static boolean check(int[][] token) {
    return token[0][0] == 0 && token[0][1] == 0 && token[0][2] == 0
            || token[1][0] == 0 && token[1][1] == 0 && token[1][2] == 0
            || token[2][0] == 0 && token[2][1] == 0 && token[2][2] == 0
            || token[0][0] == 0 && token[1][0] == 0 && token[2][0] == 0
            || token[0][1] == 0 && token[1][1] == 0 && token[2][1] == 0
            || token[0][2] == 0 && token[1][2] == 0 && token[2][2] == 0
            || token[0][0] == 0 && token[1][1] == 0 && token[2][2] == 0
            || token[0][2] == 0 && token[1][1] == 0 && token[2][0] == 0;
}

或者,也许,用泛函使它更清楚一些:

public static boolean check(int[][] token) {
    IntPredicate rowZero = row -> token[row][0] == 0 && token[row][1] == 0 && token[row][2] == 0;
    IntPredicate colZero = col -> token[0][col] == 0 && token[1][col] == 0 && token[2][col] == 0;
    IntPredicate diagonalZero = i -> i == 0 ? token[0][0] == 0 && token[1][1] == 0 && token[2][2] == 0
                                            : token[0][2] == 0 && token[1][1] == 0 && token[2][0] == 0;

    return rowZero.test(0) || rowZero.test(1) || rowZero.test(2) ||
            colZero.test(0) || colZero.test(1) || colZero.test(2) ||
            diagonalZero.test(0) || diagonalZero.test(1);
}
pb3s4cty

pb3s4cty2#

你可以将一个boolean数组初始化为全false,然后你可以做如下的事情。

if (token[0][0] && token[0][1] && token[0][2]) 
            return true;
if (token[1][0] && token[1][1] && token[1][2])
            return true;
if (token[2][0] && token[2][1] && token[2][2])
            return true;
// ...
// rest of similar conditions here
// ...

return false;

当然,这取决于你的游戏的整体设计。

busg9geu

busg9geu3#

由于所有值必须为零才能使测试为真,因此只需将它们加在一起...

for(let i=0;i<=2;i++){
    if (token[i][0] + token[i][1] + token[i][2]==0 || token[0][i] + token[1][i] + token[2][i]==0)
        return true; }
return (token[0][0] + token[1][1] + token[2][2]==0 || token[0][2] + token[1][1] + token[2][0]==0);

相关问题