簡體   English   中英

Void方法打印兩次

[英]Void method printing two times

您好我正在嘗試理解我編寫的代碼,為什么它打印下面的輸出

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}};

如何修改此代碼,讓我回想一下矩陣是對稱的還是不對稱的。

只需一份簡單的退貨聲明即可。 如果條件為假,它將不會再次執行。

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");

首先,只要找到ijmatrix[i][j] != matrix[j][i] ,你的循環就會打印出“矩陣不對稱\\ 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");
}

1)正如Eran指出的那樣,i和j不等於一次,因此只要循環迭代就會保持打印。 我建議在第一次發現i!= j時使用break語句退出循環。

2)無論循環如何表現以及矩陣是否對稱,都將調用最后一個print語句。 我建議打印矩陣是對稱的,通過在循環外創建另一個if語句來檢查對稱性。

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");
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM