[英]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");
首先,只要找到i
和j
的matrix[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.