2016-04-04 5 views
-1

Жаль, что я могу сказать, что я новичок, но, увы, я просто очень ржавый. Я пытаюсь сделать несколько простых программ, чтобы вернуться к основам, которые я узнал пару лет назад. На данный момент у меня есть два отдельных класса: Entity and Game. Я создал объект сущности игрока, и я хотел бы получить доступ к его параметрам x и y в разных методах и, в конечном итоге, к различным классам.Как ссылаться на параметры объекта в других классах в java

Мой первый инстинкт состоял в том, чтобы просто использовать «player.x», но, к сожалению, он работает только в одном классе и только с методами void. Если я попытаюсь использовать это где-нибудь еще, я продолжаю получать ошибку «NullPointerException» в строках, где я пытаюсь ссылаться на любой параметр с плеера. Любые советы о том, как ссылаться на позиции x и y без этой ошибки, или даже просто знать, почему ее единственное, что бросается в непустые методы (как в идеале я хочу использовать их при вычислении в методе float), было бы очень оценили. Это моя сущность класс:

public class Entity { 

    public float x; //x position 
    public float y; //y position 

    public Entity(float x, float y){ 

     this.x = x; 
     this.y = y; 
    } 
     //entity methods 
} 

Это моя игра класс:

public class Game{ 

    public static Entity player; 
    public static float posX = 2f; 
    public static float posY = 2f; 

    public Game(){ 

     player = new Entity(posX, posY); 
    } 

    public static float test(){ 

     float newX = player.x - 2f; //I would get the error here for example 
     return newX; 
    } 

    //Game methods 

} 

Спасибо!

EDIT

Изменен класс игры, как предложено, по-прежнему получать ту же ошибку.

public class Game { 

public Entity player; 
public float posX = 2f; 
public float posY = 2f; 

public float y = test(); 

public Game() { 

    player = new Entity(posX, posY); 
} 

public float test() { 

    float newX = player.x - 2f; //I would get the error here for example 
    return newX; 
} 

public void print() { 

    System.out.println(y); 
} 

public static void main(String[] args) { 

    Game game = new Game(); 
    game.print(); 

} 

} 
+0

Какая ошибка у вас? –

+0

java.lang.NullPointerException – user6154145

+0

Нет причин, по которым ошибка не должна возникать ни в методе void, ни в не-void. Единственное, что изменяет пустота, - это не вернуть что-то, так что, возможно, вы просто пропустили (или не удалили) оператор return, но это не связанная с этим проблема. –

ответ

5

Причина проста. Вы создаете объект player в конструкторе. Но используя его в статическом методе. Итак, ваш конструктор никогда не называется.

Попробуйте сделать ваш метод нестатическая

РЕДАКТИРОВАНИЕ

Вы можете сделать это двумя способами,

1: сделать ваш метод test() нестатическая и все будет работать как шарм.

public float test(){ 
    float newX = player.x -2f; 
    return newX 
} 

и сделайте свой Entity player нестационарным.

2: сделайте свои поля статическими и попытайтесь их инициализировать, прежде чем вызывать метод test().

public class Entity { 

public static float x; //x position 
public static float y; //y position 

public Entity(float x, float y){ 

    this.x = x; 
    this.y = y; 
} 
    //entity methods 

public static void initialize(float tx, float ty){ 
    x = tx; 
    y = ty; 
} 

public static float test(){ 

    float newX = Player.x - 2f; 
    return newX; 
} 

Конечно, второй вариант - отличное решение. Но обходной путь.

+0

Эй, спасибо за быстрый ответ. Хотя я пробовал это, и это все равно дает мне ту же ошибку. – user6154145

+0

Вам нужно показать нам, как вы вызываете метод 'test()'. –

+0

Хорошо, я отредактировал исходное сообщение, чтобы показать код, который у меня есть в классе Game, после вашей помощи. – user6154145

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