2017-02-02 170 views
0

java初學者在這裏!構造函數返回意外的null

我想要一個對象模型,它是隨機座標列表,並且根據(*),當主模型(200)運行時,ArrayList不是空的。但是,當我運行主我得到一個出界失誤,當我與周圍的打印測試(**)我得到的錯誤:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 

與構造模型的問題?

public class Model extends ArrayList<Particle>{ 
private ArrayList<Particle> particleList; 

public Model(int N) { 
    ArrayList<Particle> list1 = new ArrayList<Particle>(); 
    Particle newParticle = new Particle(); 
    for(int i=0;i<N;++i){ 
     list1.add(newParticle); 
     newParticle = new Particle(); 
     //String s= String.valueOf(newParticle.x); 
     //System.out.println(s); 
     } 
    this.particleList = list1; 
    Particle p1 = particleList.get(5); 
    double d = p1.x; 
    String s = String.valueOf(d); 
    System.out.println(s);       (*) 
} 

public static void main(String[] args){ 
    Model x1 = new Model(200); 
    Particle p1 = x1.get(0);       (**) 
    double d = p1.x; 
    String s = String.valueOf(d); 
    System.out.println(s); 
} 
+0

我相信你不是調用你的''paricleList''變量與''x1.get(0)''但超類的元素(你擴展ArrayList)。如果你想從''particleList''獲得元素,你應該定義一個getter,然後執行如下操作:''x1.getParticleList()。get(0)''。 – Plebejusz

+0

你真的想擴展一個ArrayList嗎? –

+0

你能擴展@BalajiKrishnan嗎?我這樣做是因爲我想使用.get(i),但也許我應該使用Plebejusz提示。爲什麼我不想擴展ArrayList? –

回答

1

您正在混合實際上是Model的數組,因爲它是從ArrayList擴展的事實以及您的Model包含的ArrayList。

如果你想讓你的模型成爲一個ArrayList,你不需要那個particleList屬性。您可以這樣做:

public class Model extends ArrayList<Particle> { 

    public Model(int N) { 
     for (int i = 0; i < N; i++) { 
      Particle newParticle = new Particle(); 
      this.add(newParticle); 
     } 
    } 
} 

public static void main(String[] args){ 
    Model x1 = new Model(200); 
    Particle p1 = x1.get(0);       (**) 
    double d = p1.x; 
    String s = String.valueOf(d); 
    System.out.println(s); 
} 
0

在循環,創造的Particle名單,我認爲這將解決這個問題:

list1.add(new Particle()); 

,並刪除實例化環外的Particle對象行。

1

Your Model類已經是ArrayList。你的particleList字段是無用的。

試試這個:

public class Model extends ArrayList<Particle>{ 


public Model(int N) { 

    for(int i=0;i<N;++i) 
     this.add(new Particle()); 

    Particle p1 = this.get(5); 
    double d = p1.x; 
    String s = String.valueOf(d); 
    System.out.println(s);       (*) 
} 

public static void main(String[] args){ 
    Model x1 = new Model(200); 
    Particle p1 = x1.get(0);       (**) 
    double d = p1.x; 
    String s = String.valueOf(d); 
    System.out.println(s); 
} 
0

在這種情況下,沒有必要延長的ArrayList(沒有新的功能被加入)。下面應該工作正常

public class Model { 
    private List<Particle> particleList = null; 

    public Model(int count) { 
     particleList = new ArrayList<>(count); 
     for (int i = 0; i < count; i++) 
      particleList.add(new Particle()); 
    } 

    public static void main(String[] args) { 
     Model x1 = new Model(300); 
     Particle p = x1. getParticleList().get(0); 
     System.out.println(p.x); 
     //using the new method - no need to extend ArrayList 
     System.out.print(x1.get(3)); 

    } 

    //rather than extending Arraylist, you can create a new method and use get(index) like this one: 
    public Particle get(int index){ 
     return this.getParticleList().get(index); 
    } 

    public List<Particle> getParticleList() { 
     return particleList; 
    } 

    public void setParticleList(List<Particle> particleList) { 
     this.particleList = particleList; 
    } 

} 
+0

太好了,謝謝! –