2016-06-14 48 views
2

我想檢查我的二維數組是否對稱。我寫了一個方法來檢查數組是否是對稱的。它總是返回true,即使我改變了輸入數組中的元素。我究竟做錯了什麼?當我更改數組的元素時,爲什麼我的方法不會返回false?

這裏是我的代碼:

public class learnigBoolean 
{ 
    public static void main(String[] args) 
    { 
     int[][] array = { 
      { 1, 1, 4, -1}, 
      { 1, 5, 0, -1}, 
      { 4, 0, 1, -4}, 
      {-1, -1, 4, 10} 
     }; 

     System.out.println(symetrisk(array)); 
    } 

    public static boolean symetrisk(int[][] f) 
    { 
     for (int out = 0; out < f.length; out++) { 
      for (int in = 0; in < f[out].length; in++) { 
       if (f.length == f[out].length && f[out][in] == f[out][in]) { 
        return true; 
       } 
      } 
     } 
     return false; 
    } 
} 
+3

有沒有指向'f [out] [in] == f [out] [in]'?任何給定的值總是與自身相等。 –

+0

當你輸入for循環時,'out'和'in'值都設置爲0,你會得到if條件爲真,並立即返回true,所以你基本上只檢查一個值 –

+0

@MarcB不,'NaN'不會... – glglgl

回答

5
if(f.length==f[out].length && f[out][in]==f[out][in]) 

首先檢查確保您的矩陣平方,第二什麼都不做!你正在比較每個元素本身。

不要你的意思是:

if(f.length==f[out].length && f[out][in]==f[in][out]) 

但你return語句是有問題的,由邁克爾Faisst說。

你需要的東西是這樣的:

for (int out = 0; out < f.length; out++) { 
     for (int in = 0; in < f[out].length; in++) { 
      if (f.length != f[out].length || f[out][in] != f[in][out])) { 
       return false; 
      } 
     } 
    } 
    return true; 

通過倒置檢查,可以確保你返回true之前的每一個元素被選中。

想想這樣:你只需要找到一個不滿足條件的元素,說你的數組不對稱。但是,您需要檢查每個元素,然後才能說您的陣列是對稱的。

你正在做相反的事情,說只有一次檢查後數組是對稱的。

+0

是的,你說得對。我沒有看到。但它仍然是真實的。 :/ –

+1

我編輯瞭解決方案來解釋代碼的其他問題。 –

2
f[out][in] == f[out][in] 

將始終返回true。 還呼籲「返回true」,這是第一個正賽後將退出循環:

f[0][0] == f[0][0] 

也總是如此。

如果你想讓它更有效率,你可能想要初始化你的第二個循環到「out」以防止兩次檢查同一對,跳過檢查數字對自己並且一找到不匹配就退出循環像這樣:

public static boolean symetrisk(int[][] f) 
{ 
    for (int out = 0; out < f.length; out++) { 
     if (f.length == f[out].length) //only need to check this once per row. 
     { 
      for (int in = out + 1; in < f[out].length; in++) 
      { 
       if (f[out][in] != f[in][out]) 
       { 
         return false; //once we find a non-matching value we stop checking 
       } 
      } 
     } 
     else 
     { 
      return false; //non-square array. 
     }   
    } 
    return true; 
} 
相關問題