2017-02-02 10 views
0

java начинающий здесь!Конструктор возвращает неожиданный нуль

Я хочу объект Model, который представляет собой список случайных координат, и согласно (*) ArrayList не пуст, когда основная модель работает (200). Но когда я запускаю магистраль я получить из ошибки границ, когда я проверяю с распечаткой вокруг (**) Я получаю сообщение об ошибке:

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

Вы смешиваете массив, который действительно на самом деле является IS, из-за того, что он простирается от ArrayList и ArrayList, что ваша модель CONTAINS.

Если вы хотите, чтобы ваша модель была 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

Ваш модельный класс уже является 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

Отлично, спасибо за это! –

 Смежные вопросы

  • Нет связанных вопросов^_^