我有一个数组:
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);
}
}
有人可以协助调试我的程序吗?
答案 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;
}
}
此外,请记住chunkNumIndex
和chunkIndex
的值是动态的,因此对于最后一个for循环,请使用twoDimensionalArray.length
和twoDimensionalArray[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];
}
这样的事情应该已经完成了。