如何按相同索引分组合并三个Java数组
按索引分组合并多个Java数组的修正方案
你当前的代码只是将三个数组顺序拼接,而非按索引分组提取元素合并。要实现按相同索引分组(依次取每个数组的第i个元素放入结果),需要调整元素在结果数组中的位置计算逻辑。
情况1:所有数组长度相同
如果能确定三个数组长度一致,直接遍历索引,按分组计算结果数组的位置即可:
public class MergeArraysByIndex { public static void main(String[] args) { int a[] = {1,2,3,4}; int b[] = {5,6,7,8}; int c[] = {9,10,11,12}; int elementCountPerGroup = 3; // 参与分组的数组数量 int groupCount = a.length; // 每组对应一个索引,数量等于数组长度 int[] d = new int[groupCount * elementCountPerGroup]; for (int i = 0; i < groupCount; i++) { // 计算当前组在结果数组中的起始位置 int startPos = i * elementCountPerGroup; d[startPos] = a[i]; d[startPos + 1] = b[i]; d[startPos + 2] = c[i]; } // 输出结果 for (int num : d) { System.out.print(num + " "); } } }
这段代码的核心是:每个索引i对应结果数组中的连续3个位置(i*3、i*3+1、i*3+2),分别存放a、b、c数组的第i个元素,最终得到按索引分组的合并结果。
情况2:数组长度可能不同
如果数组长度不一致,需要先取最大长度作为循环上限,同时避免数组越界:
public class MergeArraysByIndex { public static void main(String[] args) { int a[] = {1,2,3,4,13}; int b[] = {5,6,7,8}; int c[] = {9,10,11,12,14,15}; int maxLength = Math.max(Math.max(a.length, b.length), c.length); int[] d = new int[a.length + b.length + c.length]; int currentIndex = 0; for (int i = 0; i < maxLength; i++) { // 依次检查每个数组是否还有当前索引的元素,有则放入结果数组 if (i < a.length) { d[currentIndex++] = a[i]; } if (i < b.length) { d[currentIndex++] = b[i]; } if (i < c.length) { d[currentIndex++] = c[i]; } } // 输出结果 for (int num : d) { System.out.print(num + " "); } } }
这种方式会按索引顺序,依次提取每个数组的对应元素,直到所有数组的元素都被合并完成,即使数组长度不同也能正确处理。
内容的提问来源于stack exchange,提问作者Arbaz Alam
相关产品推荐
相关产品推荐

