2016-04-04 77 views
-1

希望我能說我是新的,但可惜我只是非常生鏽。我正在嘗試做幾個簡單的程序,以回到我幾年前學到的基礎知識。目前我有兩個單獨的課程:實體和遊戲。我製作了一個玩家實體對象,並且我想用不同的方法訪問它的x和y參數,最後還有不同的類。如何在java中的其他類中引用對象參數

我的第一個直覺就是使用'player.x',但不幸的是,它只能在同一個類中使用,只能使用void方法。如果我嘗試在其他地方使用,我會在嘗試引用播放器的任何參數的行上不斷收到'NullPointerException'錯誤。任何關於如何引用x和y位置而不拋出這個錯誤的建議,或者甚至僅僅知道爲什麼它只被拋出在非void方法中(理想情況下我想用它們在浮點方法中進行計算)會很大讚賞。 這是我的實體類:

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 

} 

謝謝!

編輯

改變了遊戲類的建議,仍然得到同樣的錯誤。

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或non-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

相關問題