目标数组:
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)); } public static int[] subArray(int[] arr, int begin, int end) { // 判断用户提供的下标位置是否合法 if (begin > end || begin < 0 || end > arr.length - 1) { System.out.println("用户提供的下标数据不合法"); return null; } // 计算得到新数组容量 int newCapacity = end - begin; // 创建新数组 int[] newArr = new int[newCapacity]; int count = 0; // 利用循环,从指定下标位置 begin 开始到 结束下标 end ,begin <= 范围 < end for (int i = begin; i < end; i++) { // 在新数组中存储数据内容 newArr[count++] = arr[i]; } return newArr; }}