2015-04-27 4 views
1

Я изучаю базовую Java, и у меня небольшие проблемы с массивами объектов.Невозможно сохранить длину массива объектов в Java

Некоторые фона на этот код: У меня есть отдельный класс под названием Point1, простую точку на декартовой плоскости, свойства которых, имеющие отношение к этому вопрос заключается в том:

  • 2 частные целочисленные переменные _X и _y, которые обозначают соответствующие координаты в Поинт
  • конструктор с аргументами для _x и _y, например: Point1 a = new Point1(0,0)
  • общественных методов для установки х и у значения: a.setX(int x); a.setY(int y);

Теперь меня попросили создать класс, который содержит экземпляр Point1 как массив, и у меня возникли проблемы с ним. Когда я использую этот код:

public class Polygon { 
    private int _vertNum; 
    private Point1[] _vertex = new Point1[_vertNum]; 

    public Polygon(int verts) { 
     _vertNum = verts; 

     for(int i = 0 ; i < verts ; i++) { 
      _vertex[i] = new Point1(0,0); 
     } 
    } 
} 

Это компилируется нормально, но когда я пытаюсь создать экземпляр класса, я получаю это сообщение: java.lang.ArrayIndexOutOfBoundsException: 0

Если я добавить объявление массива в конструкторе, как это :

public class Polygon { 
    private int _vertNum; 
    private Point1[] _vertex = new Point1[_vertNum]; 

    public Polygon(int verts) { 
     _vertNum = verts; 
     Point1[] _vertex = new Point1[_vertNum]; 

     for(int i = 0 ; i < verts ; i++) { 
      _vertex[i] = new Point1(0,0); 
     } 
    } 
} 

Я могу создать экземпляр класса, но при осмотре его длина всегда 0, независимо от того, что я вошел в параметре конструктора.

Моя цель - создать массив точек, длина которых задается параметрами конструктора и, по крайней мере, на данный момент, установить координаты x и y всех этих точек на 0,0, чтобы я не остался с массив нулевых объектов.

Я хорошо знаю, что это, наверное, глупый вопрос, и я прошу прощения за длинный пост - я бы спросил своего профессора, но он немного необоснованный парень, поэтому я бы очень признателен за помощь. Заранее спасибо :)

ответ

2

Попробуйте это.

public class Polygon { 
    private int _vertNum; 
    private Point1[] _vertex; 

    public Polygon(int verts) { 
     _vertNum = verts; 
     _vertex = new Point1[_vertNum]; 

     for(int i = 0 ; i < verts ; i++) { 
      _vertex[i] = new Point1(0,0); 
     } 
    } 
} 

В исходном коде, _vertNum был = 0, когда _vertex инициализация происходит, и вы в конечном итоге с массивом нулевой длины.

+1

Привет - забыл ответить раньше, но большое спасибо. Я переписал код в соответствии с вашими рекомендациями, и вещь работает как шарм. Иногда я забываю, что существует разница между объявлением переменной или экземпляром класса и фактической инициализацией. Еще раз спасибо за быстрый ответ :) –

1

Я изучаю базовую Java, и у меня возникают небольшие проблемы с объектами массивов.

Не думайте о них как о массиве объектов на данный момент. Сосредоточьтесь на основных понятиях массивов. Массивы должны иметь размер, и они имеют фиксированный размер, что означает, что после определения их размера вы не можете изменить это.

private int _vertNum; 

private Point1[] _vertex = new Point1[_vertNum]; 

_vertNum является переменной экземпляра, что означает, что он получит значение defaul, так сво ИНТ, он получит это по умолчанию, как 0. Итак, вы инициализируете свой массив Point1 размером 0.

Теперь, когда вы это делаете:

_vertex[i] = new Point1(0,0); 

Вы на самом деле пытается присвоить значение индекса 0, который даже не существует. Таким образом, работа вокруг может быть чем-то вроде:

-> Инициализировать вашу переменную экземпляра с некоторым размером, а не по умолчанию.

ИЛИ

-> Initialize ваш массив внутри функции.

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