Void方法打印两次

时间:2015-07-07 06:18:06

标签: java

您好我正在尝试理解我编写的代码,为什么要打印下面的输出

public void isSymmetricNow(int[][] matrix){
    for (int i = 0; i < matrix.length; i++) {
        for (int j = 0; j < matrix.length; j++) {
            if (matrix[i][j] != matrix[j][i]) {
                System.out.print("matrix is not symmetric \n");
            }
        }
    }
    System.out.print("matrix is symmetric \n");
}

打印我

matrix is not symmetric 
matrix is not symmetric 
matrix is symmetric 

假设给定矩阵在这里不对称。

int matrix3[][] = {{1,4,7},{-4,6,6},{7,6,9}};

如何修改此代码,让我回想一下矩阵是对称的还是不对称的。

4 个答案:

答案 0 :(得分:6)

只需一份简单的退货声明即可。如果条件为假,它将不会再次执行。

public void isSymmetricNow(int[][] matrix){
    //Random random = new Random();
    for (int i = 0; i < matrix.length; i++) {
        for (int j = 0; j < matrix.length; j++) {
            //matrix[i][j] = random.nextInt(20);
            if (matrix[i][j] != matrix[j][i]) {
                System.out.print("matrix is not symmetric \n");
                return;
            }
        }
    }
    System.out.print("matrix is symmetric \n");
}

你可以返回一个布尔表示它是对称的。

public boolean isSymmetricNow(int[][] matrix){
    //Random random = new Random();
     for (int i = 0; i < matrix.length; i++) {
         for (int j = 0; j < matrix.length; j++) {
            //matrix[i][j] = random.nextInt(20);
            if (matrix[i][j] != matrix[j][i]) {
                return false;
            }
        }
    }
    return true;
}

然后使用您的函数调用它。

if(isSymmetric(matrix))
    System.out.println("Symmetric");
else
    System.out.println("Not Symmetric");

答案 1 :(得分:4)

首先,只要找到ij matrix[i][j] != matrix[j][i],{> 1}},您的循环就会打印“矩阵不对称\ n”,这可能会发生多次。

始终调用

System.out.print("matrix is symmetric \n");,以便解释最后一行输出。

您可能希望您的方法具有布尔返回值,而不是打印此输出。这样循环只会迭代,直到你发现矩阵不对称为止。

public boolean isSymmetricNow(int[][] matrix){
    //Random random = new Random();
    for (int i = 0; i < matrix.length; i++) {
        for (int j = 0; j < matrix.length; j++) {
            //matrix[i][j] = random.nextInt(20);
            if (matrix[i][j] != matrix[j][i]) {
                return false;
            }
        }
    }
    return true;
}

在没有返回值的情况下执行相同的操作:

public void isSymmetricNow(int[][] matrix){
    //Random random = new Random();
    boolean isSymmetric = true;
    for (int i = 0; i < matrix.length && isSymmetric; i++) {
        for (int j = 0; j < matrix.length && isSymmetric; j++) {
            //matrix[i][j] = random.nextInt(20);
            if (matrix[i][j] != matrix[j][i]) {
                System.out.print("matrix is not symmetric \n");
                isSymmetric = false;
            }
        }
    }
    if (isSymmetric)
        System.out.print("matrix is symmetric \n");
}

答案 2 :(得分:0)

1)正如Eran指出的那样,i和j不等于一次,因此只要循环迭代就会保持打印。我建议在第一次发现i!= j时使用break语句退出循环。

2)无论循环如何表现以及矩阵是否对称,都将调用最后一个print语句。我建议打印矩阵是对称的,通过在循环外创建另一个if语句来检查对称性。

答案 3 :(得分:-1)

public void isSymmetricNow(int[][] matrix){
    //Random random = new Random();
    for (int i = 0; i < matrix.length; i++) {
        for (int j = 0; j < matrix.length; j++) {
            //matrix[i][j] = random.nextInt(20);
            if (matrix[i][j] != matrix[j][i]) {
                System.out.print("matrix is not symmetric \n");
                return; //When it does not symetric, return.
            }
        }
   }
   System.out.print("matrix is symmetric \n");
}