为什么我收到错误?

时间:2017-05-24 08:25:25

标签: java list data-structures runtime-error

 import java.util.*;
public class Nostalgia {
    static ArrayList<Integer> arr = new ArrayList<Integer>(5);
    static int array[] ={6,3,6,2,3};
    //static int num;
public static void main(String args[]){
    Scanner s = new Scanner(System.in);

    arr.set(0, 8);
    arr.set(1, 4);
    arr.set(3, 6);
    arr.set(2, 9);
    arr.set(4, 7);
    arr.set(5, 1);


    System.out.print(3+" :"+arr.get(3));

}
}

我收到此错误。

  

线程中的异常&#34; main&#34; java.lang.IndexOutOfBoundsException:Index:1,Size:0

     

at java.util.ArrayList.rangeCheck(Unknown Source)     at java.util.ArrayList.set(Unknown Source)     在Nostalgia.main(Nostalgia.java:9)

我试图在我的列表中放置一些值并在某个索引处显示一个值。

2 个答案:

答案 0 :(得分:2)

问题是你在空列表上调用SET(x,y),并设置为this

  

用此替换此列表中指定位置的元素   指定元素

但是set方法实际上是替换操作...... java如何替换不存在的元素..

而不是在空列表中设置元素:

destSlice

你应该将它们添加到列表中

append

但要小心,你不能添加超出列表实际大小的元素!

答案 1 :(得分:2)

ArrayList被初始化为空列表(除非您使用带有源Collection的构造函数)。 new ArrayList<Integer>(5)不会创建包含5个元素的列表,它会创建一个初始容量为5的空列表(这意味着初始后备数组的长度为5)。

set仅在您尝试更新值的索引已经具有以前的值时才有效。

因此您应该使用add。而且您不必为add提供索引。

相关问题