2014-02-21 202 views
0

我試圖檢查數組的每一行,然後每列包含重複值(拉丁矩形檢查)。我做了一個檢查一維數組的方法,但我無法弄清楚如何將二維數組的一部分傳遞給它。這是我的一維數組的檢查方法:JAVA將2D陣列的單個維度傳遞爲1D陣列

public static boolean hasDuplicates(int [] inArray) 
    { 
     for(int i = 0; i < inArray.length; i++) 
     for(int j = i + 1; j < inArray.length; j++) 
      if(inArray[i] == inArray[j]) 
       return true; 
     return false; 
    } 

這裏是我調用我以前的方法的方法的混亂:

public static boolean arrayChecker(int[][] inArray) 
    { 
     int [] splitRows = new int[inArray.length]; 
     int [] splitCols = new int[inArray[0].length]; 

     for(int row = 0; row < inArray.length; row++) 
     { 
     for(int col = 0; col < inArray[0].length; col++) 
      splitRows[col] = inArray[row][col]; 

     if(hasDuplicates(splitRows)) 
       return true; 
     } 

     for(int col = 0; col < inArray[0].length; col++) 
     { 
     for(int row = 0; row < inArray.length; row++) 
      splitCols[row] = inArray[row][col]; 

     if(hasDuplicates(splitCols)) 
       return true; 
     } 


     return false; 
    } 

我知道這個問題,但現在的問題是,我的splitRows分離和splitCols陣列穿上」 t在每個循環後重置值,所以當它再次運行時,它將檢查新值與舊值。我似乎無法找到解決辦法。我試圖在循環之前設置數組= null,但是清除了大小並將其擰得更大。

任何幫助表示讚賞。

編輯:這是我在我的主要方法調用:

 if (arrayChecker(originalArray)) 
     System.out.println("Invalid"); 
     else 
     System.out.println("Valid"); 

回答

1
hasDuplicates(inArray[row]) 

將通過一維數組來hasDuplicates

+0

那太酷了,我不知道的工作。我將如何通過一列?不會使用兩個[] []只是傳遞一個地址而不是整個列? – coinbird

+0

@CoinBird:如果你想傳遞第一列,然後從每一行獲取第一個元素並創建新的數組。 – xyz

+0

@CoinBird:如果它工作,則將其標記爲答案http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – xyz