我有一维值数组,我需要帮助使用锯齿状数组分组这些值,以便进行一系列计算。 e.g。
int array []={1 2 3 4 5 6 7 8 9 10}
我想分离并分配一个数组中的前4个,另一个数组中的下一个3,然后是第三个数组中的最后3个。我希望在我的代码中得到这样的输出。
int [][] x = new int [3][];
x[0] = new int [4];
x[0] = {1 2 3 4};
x[1] = new int [3];
x[1] = {5 6 7};
x[2] = new int [3];
x[2] = {8 9 10};
有没有其他方法可以使用灵活的for循环制作这个锯齿状数组,并且我可以将这个数组拆分为M个组或组中的N个值? 我尝试使用substring()访问这些值,但我不太清楚如何继续这样做或者我是否正确地执行此操作。
for( int i=0; i<x.length; i++) {
x [i]= array.substring (0,3);
x [i]=array.substring (4,6);
x [i]=array.substring(7,9);
}
我只是编程新手,但这段代码显然是错误的,但是你能帮助我吗?谢谢。
答案 0 :(得分:0)
你是否在System.arraycopy()
之后?
x[0] = new int[4];
System.arraycopy(array, 0, x[0], 0, 4);
x[1] = new int[3];
System.arraycopy(array, 4, x[1], 0, 3);
x[2] = new int[3];
System.arraycopy(array, 7, x[2], 0, 3);
如果没有,你的问题可能有点误导。子阵列的大小应该来自哪里?
或者这更像你想要的?
int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int xLength = 3;
int[][] x = new int[xLength][];
int arrayLength = array.length;
int remainders = arrayLength % xLength;
int subArrayLength = arrayLength / xLength;
int arrayIndex = 0;
for (int i = 0; i < arrayLength; i++)
{
int adjustedSubArrayLength = subArrayLength;
if (remainders > 0)
{
adjustedSubArrayLength++;
remainders--;
}
x[i] = new int[adjustedSubArrayLength];
System.arraycopy(array, arrayIndex, x[i], 0, adjustedSubArrayLength);
arrayIndex = adjustedSubArrayLength;
}
答案 1 :(得分:0)
因此,在创建数组后,您无法在Java中更改数组的大小,您需要可以存储数据的新数组。有一个静态System
函数,它允许您复制一个名为System.arraycopy(src, srcPos, dest, destPos, length)
的数组的特定长度
答案 2 :(得分:0)
试试这个。
static int[][] to2dArray(int[] array, int... colSizes) {
int[][] result = new int[colSizes.length][];
for (int i = 0, start = 0; i < colSizes.length; start += colSizes[i++])
result[i] = Arrays.copyOfRange(array, start, start + colSizes[i]);
return result;
}
和
int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
System.out.println(Arrays.deepToString(to2dArray(array, 4, 3, 3)));
// -> [[1, 2, 3, 4], [5, 6, 7], [8, 9, 10]]