Java 将普通数组中的值分组并移动到多维数组

Java 将普通数组中的值分组并移动到多维数组,java,arrays,for-loop,Java,Arrays,For Loop,我正在努力创建多维数组,方法是将arrayValues[]分成8组,然后将它们复制到多维数组中。任何帮助都将不胜感激。代码没有给我正确的输出 arrayValues = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3 }; int[][] groupedValues = new int[3][8]; for (int a = 0; a < arrayVa

我正在努力创建多维数组,方法是将arrayValues[]分成8组,然后将它们复制到多维数组中。任何帮助都将不胜感激。代码没有给我正确的输出

arrayValues = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3 };
int[][] groupedValues =  new int[3][8];
        
for (int a = 0; a < arrayValues.length; a++) {
    groupedValues[0][a] = arrayValues[a];
}
for (int b = 8; b < arrayValues.length; b++) {
    groupedValues[1][b] = arrayValues[b];
}
for (int c = 16; c < arrayValues.length; c++) {
    groupedValues[2][c] = arrayValues[c];
}
但它给出了输出:

groupedValues = [[1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]]

由于某些原因,它不会将下一个值分组并将它们添加到groupedValues[]数组。

正如注释中所述,在将值添加到数组时,您的代码肯定会给您一个IndexOutOfBoundsException。 这是因为您在所有三个循环中迭代整个输入数组,并尝试将24个值放入大小为8的子数组中

此代码应适用于您:

public static void main(String[] args) {
    int[] arrayValues = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3 };
    int[][] groupedValues = new int[arrayValues.length / 8][8];

    for (int i = 0; i < arrayValues.length / 8; i++) {
        for (int a = 0; a < 8; a++) {
            groupedValues[i][a] = arrayValues[(i * 8) + a];
        }
    }
    System.out.println(Arrays.deepToString(groupedValues));
}
publicstaticvoidmain(字符串[]args){
int[]arrayValues=新的int[]{1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3};
int[][]groupedValues=新的int[arrayValues.length/8][8];
for(int i=0;i
编辑:

如果您的输入数组不可拆分为8个组,则应该可以:

public static void main(String[] args) {
    int[] arrayValues = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3 };
    // Calculate how many groups of 8 there should be available
    int groupSize = (int) Math.ceil(arrayValues.length / 8.0); 
    int[][] groupedValues = new int[groupSize][8];
    int index;

    for (int i = 0; i < groupSize; i++) {
        for (int a = 0; a < 8; a++) {
            index = (i * 8) + a;
            // if the current index is beyond the input array, add 0
            if (index > (arrayValues.length - 1)) {
                groupedValues[i][a] = 0;
            } else {
                groupedValues[i][a] = arrayValues[(i * 8) + a];
            }
        }
    }
    System.out.println(Arrays.deepToString(groupedValues));
}
publicstaticvoidmain(字符串[]args){
int[]arrayValues=新的int[]{1,1,1,1,1,1,2,2,2,2,3,3,3,3,3};
//计算应该有多少组8人可用
int groupSize=(int)Math.ceil(arrayValues.length/8.0);
int[][]groupedValues=新的int[groupSize][8];
整数指数;
对于(int i=0;i(arrayValues.length-1)){
分组值[i][a]=0;
}否则{
groupedValues[i][a]=数组值[(i*8)+a];
}
}
}
System.out.println(Arrays.deepToString(groupedValues));
}

您是否接受异常?因为您在
groupedValues
上使用的索引应该是IOOBE'dI,在我不断调试时完全不知道IndexOutOfBounds,但是代码是有意义的,但是,如果数据集是奇数呢?假设有一组8个值,另一组是7个值。如何将其添加到阵列中?
public static void main(String[] args) {
    int[] arrayValues = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3 };
    // Calculate how many groups of 8 there should be available
    int groupSize = (int) Math.ceil(arrayValues.length / 8.0); 
    int[][] groupedValues = new int[groupSize][8];
    int index;

    for (int i = 0; i < groupSize; i++) {
        for (int a = 0; a < 8; a++) {
            index = (i * 8) + a;
            // if the current index is beyond the input array, add 0
            if (index > (arrayValues.length - 1)) {
                groupedValues[i][a] = 0;
            } else {
                groupedValues[i][a] = arrayValues[(i * 8) + a];
            }
        }
    }
    System.out.println(Arrays.deepToString(groupedValues));
}