Java 将普通数组中的值分组并移动到多维数组
我正在努力创建多维数组,方法是将arrayValues[]分成8组,然后将它们复制到多维数组中。任何帮助都将不胜感激。代码没有给我正确的输出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 = 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));
}