查找2D阵列的主要和次要对角线是否由0组成

1 java arrays for-loop matrix

这是我正在为一个简介Java类工作的学校问题.分配是编写一个程序,生成一个8 x 8矩阵的随机生成的二进制数,并进行程序检查,如果有的话,列都是0,如果主要和次要对角线也是由零组成.主要对角线从左上角到右下角(即所形成的对角线arrayName[0][0]arrayName[8][8]在这种情况下)和次对角线是一个从右上角矩阵的左下角去.

我已经完成了所有工作,除了检查主要和次要对角线的部分,我无法弄清楚为什么这不起作用.我一直试图做的只是计算沿对角线的零数,如果这个数字是8,那么你自己就得到了一个由0组成的对角线.以下是我对主要和次要数组的两种方法:

public static void majorDiagonal(int[][] board) {
    byte count = 0;

    for(int row = board.length - 1, offsetNumber = board.length - 1; row > 0; row--, offsetNumber--)
        for(int column = board.length - 1; column > 0; column--)
            if(board[row][offsetNumber] == 0) count++;

    if(count == 8) System.out.println("All zeroes on the major diagonal");
}

public static void minorDiagonal(int[][] board) {
    byte count = 0;

    for(int row = board.length - 1, offsetNumber = 0; row > 0; row--, offsetNumber++)
       for(int column = board.length - 1; column > 0; column--)
           if(board[row][offsetNumber] == 0) count++;

    if(count == 8) System.out.println("All zeroes on the minor diagonal");
}
Run Code Online (Sandbox Code Playgroud)

当我试图通过在for循环中计数找到主要对角线时遇到的一个有趣的错误,即:

for(int row = 0; row< board.length; row++)
    for(int column = 0; column < board.length; column++)
        if(board[row][row] == 0) count++;
Run Code Online (Sandbox Code Playgroud)

代码不起作用,但如果对角线全部为1并且单个0,则会打印"主要对角线上的全零",即使变量count不是8.

希望这是有道理的,谢谢你的帮助.

Pav*_*aev 7

你的事情太复杂了.请考虑一下您需要检查的元素的位置.对于主要对角线,指数为:(0,0),(1,1),(2,2),......,(7,7).现在暂停,观察变化模式,并思考:实际需要多少个循环来生成这样的序列?次要对角线只是表面上的不同:(0,7),(1,6),(2,5),...,(7,0) - 可以改写为:(7-7,7),( 7-6,6),(7-5,5),......(7-0,0).再次,考虑一下您实际需要多少循环.