System.arraycopy获取java.lang.ArrayIndexOutOfBoundsException ..我试图将数据从一个数组复制到下一个数组。但我得到了例外
private String array[] = { "NO DATA YET" };
private void setListData()
{
String array2[] = { "Iphone", "Tutorials", "Gallery", "Android", "item 1", "item 2", "item3", "item 4" };
System.arraycopy(array2, 0, array, 0, array2.length);
}
答案 0 :(得分:7)
你试图将8个项目复制到长度为1的数组中。你不能这样做。
否则,如果满足以下任何条件,则抛出IndexOutOfBoundsException并且不修改目标:
- srcPos参数为负数。
- destPos参数为负数。
- 长度参数为负数。
- srcPos + length大于src.length,即源数组的长度。
- destPos + length大于dest.length,即目标数组的长度。
在这种情况下,destPos + length
为8,dest.length
为1,因此抛出异常。
请注意,Java中的数组具有固定长度。如果您需要可扩展容器,请查看ArrayList
。
答案 1 :(得分:1)
因为array
的长度是1。
声明array[] = { "NO DATA YET" };
创建一个长度为1的数组,其中包含一个项目。
而是将目标数组声明为:
private String array[] = new String[8];
答案 2 :(得分:1)
数组的长度只有1,你试图从array2复制8个东西。尝试使用ArrayList或随着需要增长而增长的东西。
答案 3 :(得分:0)
解决所有类型的ARRAYINDEXOUTOFBOUNDS例外的方法:
借助面向ArrayIndexOutOfBoundsException的以下示例了解此内容:
public static void main(String [] args){
String dest[] = { "Iphone", "Tutorials", "Gallery", "Android", "item 1", "item 2", "item3", "item 4" };
String src[]=new String[8];
System.arraycopy(src, 0, dest, 1, src.length);
System.out.println(dest[4]);
}
上述情况的解决方案可以是以下任意一种: 1。要么增加目标数组的大小,以便可以找到位置。 2。。由于我们从索引1开始,因此您只能从源数组中复制7个元素。 3。。或者,您可以从目标数组中的索引0开始复制,以便它可以容纳源数组的所有数组元素。