You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 16:20:05