在数组中指定下标开始,到指定下标结束,获取数据存储到新数组中

目标数组:
    int[] arr = {10, 13, 5, 7, 19, 2, 4, 6, 8, 10};
    指定开始下标 2 指定结束下标 6
    最终的新数组数据存储情况
    {5, 7, 19, 2};


    
分析:
    1. 指定下标 2 开始到 6 结束,但是数据结果为 {5, 7, 19, 2}; 表示
        数据的截取形式是【要头不要尾】也是 Java 中约定俗成的范围数据要求
    2. 指定下标 2 开始到 6 结束,截取之后,新数组的元素个数 4
        6 - 2 ==> 4
        新数组容量是结尾下标位置 - 开始下标位置
    3. 下标数据有合法性要求
        开始下标和结束下标必须在合法下标范围以内
        开始下标必须小于结束下标。
        错误条件:
            begin 开始 end 结束
            fromIndex 开始下标位置  toIndex 目标下标位置
            
            begin < 0
            begin > arr.length - 1
            end < 0 
            end > arr.length - 1
            begin > end
            
        核心错误条件:
            begin > end
            可以利用最小值封底,最大值封顶的方式来约束数据的范围
            如果 begin < 0 配合 begin > end 错误条件限制,可以删除 end < 0 约束
                b => -2  e => 5 ×
                b => -1  e => -5 ×
                b => 5  e => -1 ×
                b => 2 e => 5 正确
        
            如果 end > arr.length - 1 配合 begin > end 错误条件限制,可以删除 begin > arr.length - 1 约束
                
     
     4. 尾插法添加数据形式。
         需要一个 int 类型变量 count 
             a. 记录当前数组中有效元素个数
             b. 记录存储数据的下标位置。
 */

import java.util.Arrays;

public class Test{
    public static void main(String[] args) {
        // 源数据数组
        int[] arr = {10, 13, 5, 7, 19, 2, 4, 6, 8, 10};
        
        // 用户指定的开始下标和结束下标
        int begin = 2;
        int end = 6;
        
        int[] newArr = subArray(arr, begin, end);
        
        System.out.println(Arrays.toString(newArr));
    }

    /**
     * 从指定数组中,指定下标位置开始,到指定下标位置结束,截取新的数组内容
     * 
     * @param arr   用户指定的源数据数组
     * @param begin 截取操作开始下标位置
     * @param end   截取操作结束下标位置
     * @return 截取得到的新数组,如果操作失败,返回 null
     */
    public static int[] subArray(int[] arr, int begin, int end) {
        // 判断用户提供的下标位置是否合法
        if (begin > end || begin < 0 || end > arr.length - 1) {
            System.out.println("用户提供的下标数据不合法");
            /*
             * null 可以看做是空,一般用于告知方法调用者,当前操作没有数据反馈。
             * 【后期学习】引用数据类型内容,同时也是一个非常特殊的引用数值。
             */
            return null;
        }
        
        // 计算得到新数组容量
        int newCapacity = end - begin;
        
        // 创建新数组
        int[] newArr = new int[newCapacity];
        
        /*
         * 1. 计数当前数组中存储有效元素个数
         * 2. 记录存储数据的下标位置
         */
        int count = 0;
        
        // 利用循环,从指定下标位置 begin 开始到 结束下标 end ,begin <= 范围 < end
        for (int i = begin; i < end; i++) {
            // 在新数组中存储数据内容
            newArr[count++] = arr[i];
        }
        return newArr;
    }
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值