在以下增强的for 循环中,您正尝试像使用索引一样访问元素:
for (int element: arr) {
System.out.println(arr[element]);
}
数组arr 的最后一个元素可以是16,因此对于这个值,arr[element] 将被转换为arr[16],从而导致ArrayIndexOutOfBoundsException。这是因为arr[] 的大小是16,因此arr[] 中的最后一个索引是15。当您尝试访问 clone[] 的元素时也是如此。
替换
System.out.println(arr[element]);
System.out.println(clone[ele]);
与
System.out.println(element);
System.out.println(ele);
修正后的代码如下:
import java.util.Random;
public class Main {
public static void main(String[] args) {
Random rand = new Random();
int[] arr = new Random().ints(16, 1, 16 + 1).sorted().toArray();
int[] clone = arr;
for (int element : arr) {
System.out.println(element);
}
System.out.println("---Clone the Array----");
for (int ele : clone) {
System.out.println(ele);
}
}
}
或者,您可以使用索引样式来访问数组中的元素:
import java.util.Random;
public class Main {
public static void main(String[] args) {
Random rand = new Random();
int[] arr = new Random().ints(16, 1, 16 + 1).sorted().toArray();
int[] clone = arr;
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
System.out.println("---Clone the Array----");
for (int i = 0; i < clone.length; i++) {
System.out.println(clone[i]);
}
}
}
注意:你应该使用int[] clone = arr.clone()来克隆arr[]。当您执行int[] clone = arr 时,数组引用clone[] 将继续引用相同的元素,即在使用clone[] 访问该索引上的值时,arr[] 索引上的任何更改都将以相同的方式反映,例如
import java.util.Arrays;
import java.util.Random;
public class Main {
public static void main(String[] args) {
Random rand = new Random();
int[] arr = new Random().ints(16, 1, 16 + 1).sorted().toArray();
int[] clone = arr;
System.out.println(Arrays.toString(arr));
System.out.println(Arrays.toString(clone));
arr[4] = 100;
System.out.println(Arrays.toString(arr));
System.out.println(Arrays.toString(clone));
}
}
示例运行:
[1, 2, 3, 4, 4, 4, 6, 6, 7, 8, 9, 11, 13, 13, 14, 16]
[1, 2, 3, 4, 4, 4, 6, 6, 7, 8, 9, 11, 13, 13, 14, 16]
[1, 2, 3, 4, 100, 4, 6, 6, 7, 8, 9, 11, 13, 13, 14, 16]
[1, 2, 3, 4, 100, 4, 6, 6, 7, 8, 9, 11, 13, 13, 14, 16]
另一方面,
import java.util.Arrays;
import java.util.Random;
public class Main {
public static void main(String[] args) {
Random rand = new Random();
int[] arr = new Random().ints(16, 1, 16 + 1).sorted().toArray();
int[] clone = arr.clone();
System.out.println(Arrays.toString(arr));
System.out.println(Arrays.toString(clone));
arr[4] = 100;
System.out.println(Arrays.toString(arr));
System.out.println(Arrays.toString(clone));
}
}
示例运行:
[1, 2, 2, 2, 2, 3, 6, 6, 7, 7, 11, 13, 14, 14, 14, 15]
[1, 2, 2, 2, 2, 3, 6, 6, 7, 7, 11, 13, 14, 14, 14, 15]
[1, 2, 2, 2, 100, 3, 6, 6, 7, 7, 11, 13, 14, 14, 14, 15]
[1, 2, 2, 2, 2, 3, 6, 6, 7, 7, 11, 13, 14, 14, 14, 15]