Создание объектов в Java - PullRequest
       8

Создание объектов в Java

1 голос
/ 15 октября 2010

У меня есть следующий класс:

class Position {

        private double x,y;
        private int id;

        private static int count=0; //counts number of times a Position object has been created

        public Position (double initX, double initY) {
            x=initX;
            y=initY;
            id=count;
            count++;
        }

        public Position (Position a) {
            id=count;
            count++;
            x=a.x;
            y=a.y;
        }

Теперь я хочу создать объект Position в другом из моих файлов .java.Как бы я это сделал?Разве я не могу просто использовать Position x=new Position;?Это не работает.Должен ли я импортировать класс позиции в файлы?Я тоже попробовал, не сработало.Не позволил бы мне импортировать.Мои файлы находятся в папке по умолчанию.

Вот где я хочу использовать его.Я даже не уверен, что правильно читаю инструкции.Это то, что они хотят от меня?Чтобы инициализировать каждый элемент массива новым объектом позиции?

/**
     * Returns an array of num positions. Each position is initialized to a random
     * (x,y) position.
     * if num is less than zero, just return an empty array of length 0.
     * 
     * @param num
     *            number of positions to create
     * @return array of newly minted Points
     */
 public int[] randomPos(int[] a) {
     int numPositions=Position.getNumPositionsCreated();
     int[] posArr=new int[numPositions];
     int x,y;
     for (int i=0; i<numPositions;i++)
         Position rand = new Position(x,y);
         //

Ответы [ 6 ]

4 голосов
/ 15 октября 2010

Вам необходимо вызвать конструктор,

Position x = new Position(2.0,2.0);

Поскольку один из ваших конструкторов принимает два double аргумента, я использовал их в качестве примера.

Или,Вы можете создать новый объект Position, передав другой объект Position,

Position otherX = new Position(new Position(2.0,2.0)); 
// or combining our above example assuming that x is already instantiated
Position otherX = new Position(x);

Кроме того, на случай, если вы не уверены, существует разница между экземпляром и объявление !

Создание экземпляра:

Position posX = new Position(1.0, 4.0);

Теперь posX является экземпляром объекта Positionпотому что мы создаем наш объект, вызывая конструктор.

Объявление:

Position posX;

Обратите внимание, что переменная posX равна , объявлена ​​ как объект Position, но еще не был создан , поэтому posX будет иметь ссылку null.

Обновление:

Без выполнения домашней работы за вас, потому что вы будетене учиться таким образом.Я могу сказать вам, что то, что у вас есть, и то, что перечислено в javadoc выше, не согласны.Кроме того, учитывая способ написания Javadoc, трудно следовать, поэтому позвольте мне попытаться очистить его для вас и оставить вас делать все остальное,

/* Returns an array of n Positions. Each Position is initialized to a random
 * (x,y) position.
 * if n is less than zero, just return an empty array of length 0.
 * 
 * @param n
 *     number of Positions to create
 * @return array of newly created Positions
 */

Теперь мы можем разбить этоjavadoc, поэтому давайте точно определим, что мы знаем.

  • Мы передаем аргумент n, который указывает, насколько большим должен быть массив Positions.
  • Нам нужно проверить, чтобыпосмотрим, будет ли n равен 0, если так, мы вернем пустой массив Position.
  • Каждый Position объект будет создан со случайными x и y значения.
  • Мы знаем, что нам нужно вернуть массив Position.

Это должно помочь вам начать, я уверен, что вы можете выяснить все остальное.

1 голос
/ 15 октября 2010

Java уже имеет класс Point. Это может быть излишним для вас, но я бы упомянул об этом.

http://download -llnw.oracle.com / JavaSE / 6 / документы / API / Java / AWT / геом / Point2D.html

1 голос
/ 15 октября 2010

Ваши конструкторы принимают аргументы, поэтому вы должны предоставить некоторые.

Position p = new Position(1.0, -2.0);

Если вы хотите создать его без аргументов, вам нужно добавить конструктор с нулевым аргументом.

public Position() {
}

, который затем вызывается при выполнении Position p = new Position() (скобки требуются, если не переданы аргументы)

Если вы не определяете никаких конструкторов, java автоматически создает подразумеваемый конструктор с нулевым аргументом, но как только вы определите другой конструктор, вы должны явно определить конструктор с нулевым аргументом, чтобы он был.

Если оба ваших класса находятся в пакете по умолчанию, вам не нужно ничего импортировать.

1 голос
/ 15 октября 2010

Не забудьте про скобки и аргументы для передачи в конструктор при вызове new, например:

Position p = new Position(x, y);

В зависимости от того, где находится другой класс, вам также может понадобиться сделать Position открытым классом(похоже, вы используете видимость по умолчанию для package-private).

Также обратите внимание, что сначала необходимо инициализировать x и y,

1 голос
/ 15 октября 2010
Position x = new Position(1d,2d);

Вам нужно передать аргументы вашего конструктора. Поскольку вы определили 2 конструктора в своем классе Position, вы должны использовать один из них. Как правило, неплохая идея добавить конструктор ничего не делать в ваш класс. как

Postion () {}

или в вашем случае

Position () {
   Position.static++;
}

так как вы считаете. Обратите внимание, что вы должны ссылаться на статические элементы статически.

1 голос
/ 15 октября 2010
Position x = new Position(1.0, 2.0);

Например. То, как вы сейчас это делаете, - это отсутствие аргументов метода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...