之前把数组的范围from和to加一或者减一运行就会报错,如果用Scanner录入那就要输入之后才会报错,找了半个小时才找到问题在的位置,但
不知道原理求解
把数组范围从from和to加一或减一就会报错,是不是copyOfRange方法中newArr定义数组的长度不对,或者from和to的范围超出了arr数组的范围,这个方法中for循环中访问的范围要在newArr和arr的范围内才可以正常运行。
而使用Scanner获取from和to的值后再报错,是因为获取了from和to的值才会执行下面的代码,而前面那种方式,from和to已经有值了就会直接执行后面的复制数组元素的操作,所以会直接报错。
测试如下:
import java.util.Scanner;
public class ArrayCopyTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sr = new Scanner(System.in);
int from = sr.nextInt();
int to = sr.nextInt();
// int from = 1;
// int to = 2;
int [] arr = {1,2,3,4,5,6,7,8,9};
int [] copyArr = copyOfRange(arr,from,to);
for(int i=0;i<copyArr.length;i++) {
System.out.print(copyArr[i]+" ");
}
}
private static int[] copyOfRange(int[] arr, int from, int to) {
// TODO Auto-generated method stub
//此处定义数组newArr数组元素的长度,这个长度要和下面for循环遍历的范围相符合,同时from和to(to-1)的范围不超过arr数组的方位,下面代码才不会报错
int[] newArr = new int [to-from];
int index=0;
for(int i=from;i<to;i++) { // 此处遍历数组arr从下标from到to-1之间的元素,然后复制到数组newArr中
newArr[index]=arr[i];
index++;
}
return newArr;
}
}