2015-05-23 72 views
2

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

你创建一个空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); 
    } 
} 

,或者提供一个默认的元素:

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

非常感谢,+1,它像一个魅力。你是一个巫师! –

+0

@ViktorLekić接受答案,如果它帮助你。因为在Stackoverflow中接受答案会让人们知道问题已经解决。 – TSKSwamy

0

这是正在发生的事情:

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

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

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

+0

是的,我的不好。现在工作正常。感谢您回复哥们。 –