Инициализация объектов Java - PullRequest
0 голосов
/ 15 октября 2010

Хорошо, скажем, у меня есть класс

class Ghost {   
    private int x, y, direction;
    private Color color;

Теперь скажите, что я явно не определяю конструктор, поэтому он просто использует конструктор по умолчанию.Если бы я создал новый объект Ghost, какое значение имело бы направление?0 верно?Но я не знаю, почему я продолжаю получать значение 1 для направления.Что-нибудь необычное, что вы думаете, может быть не так?

Ответы [ 2 ]

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

Есть что-то, что вы нам не показываете.Ваш метод getDirection () просто возвращает направление или делает что-то более экзотическое?Есть метод установки, который делает что-то странное?Не изменяет ли какая-то другая часть класса, которую вы не показывали, направление?некоторая нестандартная реализация (почти наверняка не последняя).

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

Можете ли вы показать нам больше кода? Мне кажется, что здесь происходит что-то еще.

int переменные будут по умолчанию инициализироваться на 0 в Java, и если я использую ваш фрагмент и создаю экземпляр Ghost, все его int члены равны 0.

Так что из ваших комментариев, я думаю, что может быть проблема с вашим кодом, например, вы случайно устанавливаете direction при использовании Ghost.setX или Ghost.setY.

В моей чрезвычайно простой реализации класса этот код тестирования работает точно так, как задумано.

Изменено с момента публикации кода

Хорошо, у меня есть класс на основе вашего кода. Я не вижу ничего плохого в других функциях, так как очень немногие классы действительно меняют direction. Я удалил эти дополнительные функции, потому что они не изменили направление, кроме одной вещи, которая установила бы ее на 0.

Вам следует попробовать очень сокращенный контрольный пример, чтобы проверить, работает ли ваш код. Попробуйте это:

import junit.framework.Assert;

class Ghost
{
    private int x, y, direction;

    public int getX() { return x; }
    public void setX(int x) { this.x = x; }

    public int getY() { return y; }
    public void setY(int y) { this.y = y; }

    public int getDirection() { return direction; }
    public void setDirection(int direction) { this.direction = direction; }

    public static void main (String [] args)
    {
        Ghost g = new Ghost();
        g.setX(10);
        g.setY(20);

        Assert.assertEquals(g.getDirection(), 0);

        System.out.println(g.getX() + " " + g.getY() + " " + g.getDirection());
    }   
}

Здесь все еще работает, поэтому попробуйте этот код как есть. Это чисто ваш код, и если он работает (и должен), то есть другой код, например пользователь вашего класса, который что-то делает.

Автономно, ваш код должен нормально работать.

Использование отладчика

Вы знакомы с отладчиком? Если вы используете Eclipse или NetBeans, вы должны быть дружелюбны к использованию отладчиков, интегрированных в их среды. Это действительно должно помочь вам отследить, когда direction изменит значения, поместив на него часы.

Использование отладчика выходит за рамки этого ответа; это то, что вы действительно должны прочитать и попробовать сами.

Вот ссылка для отладки в Eclipse:

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