Java中如何将整数数组分割为多个大小为n的子数组?
整数数组分割为指定大小的子数组解决方案
问题分析
你的代码存在两个核心问题:
- 子数组内容重复:每次调用
Arrays.copyOf(arrr, 3)都是复制原数组的前3个元素,而非对应区间的元素,导致输出全是{1,3,2}。 - 未处理剩余元素:原数组长度为8,按大小3分割会剩下2个元素,你的循环逻辑没有覆盖这部分内容。
正确实现代码
使用Arrays.copyOfRange截取指定区间的子数组,同时处理最后一组不足指定大小的元素:
import java.util.*; public class SplittingArraysIntoSubArrays { public static void main(String[] args) { int[] arrr = {1,3,2,5,4,6,8,13}; List<int[]> arrayList = new ArrayList<>(); int arrayLength = arrr.length; int n = 3; for (int i = 0; i < arrayLength; i += n) { // 确定当前子数组的结束索引,避免数组越界 int end = Math.min(i + n, arrayLength); // 截取从i到end的子数组(左闭右开) int[] subArray = Arrays.copyOfRange(arrr, i, end); arrayList.add(subArray); } // 打印验证结果 for (int[] sub : arrayList) { System.out.println(Arrays.toString(sub)); } } }
代码说明
- 循环逻辑:通过
i += n控制每次截取的起始位置,确保每次移动n个元素的步长。 - 边界处理:用
Math.min(i + n, arrayLength)确定结束索引,防止最后一次截取时超出数组长度。 - 正确截取:
Arrays.copyOfRange(arr, start, end)会返回从start(包含)到end(不包含)的子数组,完全匹配分割需求。
输出结果
运行上述代码会得到:
[1, 3, 2] [5, 4, 6] [8, 13]
内容的提问来源于stack exchange,提问作者Sanjay Naik
相关产品推荐
相关产品推荐

