2014-11-22 2 views
0

Я пытаюсь преобразовать размерный массив размером 16 x 4000 в 1000 блоков размером 8 x 8. Я должен получить 1000 таких блоков после запуска этого кода. Это то, что я написал, и мне нужно знать, где я ошибся, поскольку этот код дает мне всего лишь 500 блоков.Преобразование 2D-массива в несколько блоков 2D-массива

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, тогда вы будете знать, что она работает. –

+0

Мне нравится 'int one = 0' :) –

ответ

0

Проблема с вашей логикой для вычисления числа блоков:

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

Он должен быть изменен на:

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

Также вы должны увеличивать переменную newColumn внутри внутреннего для петли ..

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++; 
} 
Смежные вопросы