2014-11-22 206 views
0

我試圖將一個16×4000維數組轉換爲1000個8×8數組塊。我應該在運行此代碼後以1000個這樣的塊結束。這是我寫的,我需要知道我做錯了什麼,因爲這段代碼只給了我500塊的東西。將二維數組轉換爲二維數組的多個塊

blockedCode(d); //d is a two D 16 x 4000 array 


private static void blockedCode(int[][] array) 
    { 

     int one=0; 


     for (int i = 0; i < array.length; i += 8) 
     {   
      for (int j = 0; j < array[i].length; j += 8) 
      { 

       int block = (((i/8) * 8) + (j/8)); 


       System.out.println("Block : " + block); 
       int[][] newArray = new int[8][8]; 
       int newRow = 0; 
       List list = new ArrayList<>(); 

       for (int k = i; k < (i + 8); k++) 
       { 
        int newColumn = 0; 
        for (int l = j; l < (j + 8); l++) 
        { 
         // This is where you are getting your array inside the given block. 
         newArray[newRow][newColumn] = array[k][l]; 
         one++; 

         // System.out.format("[%-1s][%-1s] : %-3s ", newRow, newColumn, newArray[newRow][newColumn++]); 
        } 

        newRow++; 
       } 
     } 
    } 
} 
+0

你我thod看起來充滿了未經測試的代碼,評論和空行...我建議你用TDD從頭開始編寫程序,然後你就會知道它的工作原理。 – 2014-11-22 08:37:58

+0

我喜歡'int one = 0' :) – 2014-11-22 08:40:44

回答

0

問題是與你的邏輯計算塊編號:

int block = (((i/8) * 8) + (j/8)); 

應改爲:

int block = (((i/8) * (array[i].length/8)) + (j/8)); 

你也需要增加內內newColumn變量for loop ..

for (int k = i; k < (i + 8); k++) 
{ 
    int newColumn = 0; 
    for (int l = j; l < (j + 8); l++) 
    { 
      // This is where you are getting your array inside the given block. 
      newArray[newRow][newColumn] = array[k][l]; 
      one++; 
      newColumn++;  //add this line 

      // System.out.format("[%-1s][%-1s] : %-3s ", newRow, newColumn, newArray[newRow][newColumn++]); 
    } 
    newRow++; 
}