java - 理解数组中的一段代码

时间:2016-05-16 14:26:46

标签: java arrays algorithm

为什么我需要写:

mat.length-1 

在第二个for循环中(循环所有条件)。

循环:

for (int i = 0; i < mat.length-1; i++) {
        for (int j = 0; j < mat.length-1; j++) {
            if (i == j) {
                j++;
                if (i == mat.length - 1 && j == mat.length - 1) {
                    break;
                }
            }
            if (i != j && mat[i][j] == mat[j][i]) {
                flag = true;

            } else {
                flag = false;
                if (flag == false) {
                    stop = 1;
                    i = mat.length - 1;
                }
            }
        }

    }

Checking program applies

完整代码:

public class test {
public static void main(String[] args) {

    //int[][] mat = { { 9, 2, 4 }, { 2, 9, 7 }, { 4, 7, 9 } };
    int[][]mat = {  { 9, 2, 3, 4},
                    { 2, 9, 6, 3}, 
                    { 3, 6, 9 ,2},
                    { 4, 3, 2 ,9}};

    boolean flag = true;
    int stop = 0;

    for (int i = 0; i < mat.length; i++) {
        for (int j = 0; j < mat.length; j++) {
            System.out.print("[" + mat[i][j] + "]");
        }
        System.out.println();
    }
    for (int i = 0; i < mat.length-1; i++) {
        for (int j = 0; j < mat.length-1; j++) {
            if (i == j) {
                j++;
                if (i == mat.length - 1 && j == mat.length - 1) {
                    break;
                }
            }
            if (i != j && mat[i][j] == mat[j][i]) {
                flag = true;

            } else {
                flag = false;
                if (flag == false) {
                    stop = 1;
                    i = mat.length - 1;
                }
            }
        }

    }

    if (stop == 1) {
        System.out.println("Not first folded matrix");
    } else {
        System.out.println("First folded matrix");
    }

}
}

这是有效的,但如果我将其改为

mat.length 

它不起作用 如果我写了一个负数,那么它会在它到达数组末尾之前停止i的循环。 可以解释一下吗?

1 个答案:

答案 0 :(得分:0)

在你的代码中,这些行没有用处,因为i和j在代码中永远不会等于(mat.length-1)。

if (i == mat.length - 1 && j == mat.length - 1) {
    break;
}

将您的代码更改为:

    for (int i = 0; i < mat.length; i++) {
        for (int j = i+1; j < mat.length; j++) {
            if (mat[i][j] != mat[j][i]) {
                flag = false;
                j = mat.length;
                i = mat.length;
            }
        }
    }

    if (flag == false) {
        System.out.println("Not first folded matrix");
    } else {
        System.out.println("First folded matrix");
    }