希望我能说我是新人,但唉,我只是非常生疏。我试图制作一些简单的程序,以回到几年前我学到的基础知识。目前我有两个独立的类:实体和游戏。我已经创建了一个玩家实体对象,我想在不同的方法中访问它的x和y参数,并最终获得不同的类。
我的第一直觉就是使用' player.x'但不幸的是,它只能在同一个类中工作,并且只能使用void方法。如果我尝试在其他任何地方使用它,我会一直得到一个NullPointerException'我尝试从播放器引用任何参数的行上的错误。关于如何引用x和y位置而不抛出该错误的任何建议,或者甚至只知道为什么它只被抛入非void方法(理想情况下我想在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
}
谢谢!
修改
按照建议修改了游戏类,但仍然遇到同样的错误。
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 :(得分: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;
}
当然,第二个不是一个很好的解决方案。但是解决方法。