通用数组索引超出范围

时间:2015-05-23 08:53:44

标签: java generics

好的,这是我的问题。我正在学习使用泛型类和方法。我想创建一个通用数组列表和方法,通过选择索引添加/删除元素。我根本不知道该怎么做。我的例子是调用IndexOutOfBoundsException。

欢迎任何帮助。 谢谢它提前。

类klasa3:

public class klasa3<E> {
    private java.util.ArrayList<E> list = new java.util.ArrayList<>();



   public klasa3(int initSize){ 

   }


   public int getSize() {
         return list.size();
   }

   public E peek() {
         return list.get(getSize() - 1);
   }

   public void push(E o,int indeks) {
       o = list.get(indeks);
       list.add(o);
   }

   public E pop(int indeks) {
         E o = list.get(indeks);
         list.remove(indeks);
        return o;
   }

   public boolean isEmpty() {
         return list.isEmpty();
   }

   @Override
   public String toString() {
           return "stack: " + list.toString();
   }
 }

主要课程:

public class klasa2 {
   public static void main(String[] args ) {


        klasa3 stak2 = new klasa3(13);
       stak2.push("cola",2);  // problem here
       stak2.pop(2);
        System.out.println(stak2.getSize()); 

   }


 }

2 个答案:

答案 0 :(得分:2)

您正在创建一个空的didFinishLaunchingWithOptions,然后尝试在ArrayList方法中从中获取第三个元素(索引为2的元素)。那不行。

现在,您当前忽略了构造函数中的push参数。您可能需要以下内容:

initSize

或提供默认元素:

// TODO: Rename the class to follow naming conventions
public klasa3(int initSize) { 
    for (int i = 0; i < initSize; i++) {
        list.add(null);
    }
}

答案 1 :(得分:0)

这就是发生的事情:

main方法中,您首先要创建一个新的klasa3对象。然后你打电话给push("cola", 2)

push方法执行:o = list.get(indeks),其中indeks2。此时列表为空,因此2不是有效索引,导致IndexOutOfBoundsException

传递给get方法的索引必须介于0(含)和列表大小(不包括)之间。由于大小为0,因此索引2无效。