将数组拆分成块的麻烦

时间:2016-04-22 02:02:26

标签: java arrays

我有一个数组:

private static int[] array = {5, 2, 1, 6, 3, 7, 8, 4};

我正在尝试将其拆分为具有x个块的二维数组,其中所有块具有相等的长度(在我的情况下为2),然后将原始数组的每个值分配给对应的数组中的索引。然后它会增加块编号的索引并重置索引,迭代遍历长度为1的各个数组。

问题是,我编写的代码执行所有不输出任何内容的代码:

public class Debug 
{
     private static int[] array = {5, 2, 1, 6, 3, 7, 8, 4};

     private static void chunkArray(int chunkSize) 
     {
         int chunkNumIndex = 0;
         int chunkIndex = 0;
         int numOfChunks = (int)Math.ceil((double)array.length / chunkSize);
         int[][] twoDimensionalArray = new int[numOfChunks][chunkSize];

         for (int i = 0; i < array.length; i++)
         {
             twoDimensionalArray[chunkNumIndex][chunkIndex] = array[i];
             chunkIndex++;

             while(chunkNumIndex < numOfChunks)
             {
                 if (chunkIndex == chunkSize)
                 {
                     chunkNumIndex++;
                     chunkIndex = 0;
                 }
             }
         }

         for(int i = 0; i < chunkNumIndex; i++)
         {
             for(int j = 0; j < chunkIndex; j++)
             {
                 System.out.printf("%5d ", twoDimensionalArray[i][j]);
             }

             System.out.println();
         }
     }

     public static void main(String args[])
     {
         chunkArray(2);
     }
  }

有人可以协助调试我的程序吗?

2 个答案:

答案 0 :(得分:1)

问题是你有一个不必要的while(chunkNumIndex < numOfChunks)没有意义。 if语句足以正确迭代变量:

    for (int i = 0; i < array.length; i++) {
        twoDimensionalArray[chunkNumIndex][chunkIndex] = array[i];
        chunkIndex++;
        if (chunkIndex == chunkSize) {
            chunkNumIndex++;
            chunkIndex = 0;
        }
    }

此外,请记住chunkNumIndexchunkIndex的值是动态的,因此对于最后一个for循环,请使用twoDimensionalArray.lengthtwoDimensionalArray[0].length代替:

    for(int i = 0; i < twoDimensionalArray.length; i++) {
        for(int j = 0; j <  twoDimensionalArray[0].length; j++) {
            System.out.printf("%5d ", twoDimensionalArray[i][j]);
        }
    }

答案 1 :(得分:0)

你不必为此做出不必要的努力,没有必要为chunkIndex和chunkNumIndex保留计数器,我们只需要div和mod i。

int numOfChunks = (array.length / chunkSize) + (array.length % chunkSize == 0 ? 0 : 1);
int[][] twoDimensionalArray = new int[numOfChunks][chunkSize];
for (int i = 0; i < array.length; i++) {
    twoDimensionalArray[i / chunkSize][i % chunkSize] = array[i];
}

这样的事情应该已经完成​​了。