我一直在尝试将播放器名称(使用Scanner
)打印到屏幕上,但它不断给我null
而不是人物类型。
如下所示,使用playerOneName
方法时正确显示playerName()
,但只要我尝试使用startingHouse()
方法,就会显示null
}。
更新:已添加解决方案:
必须在Player_Information类中添加以下代码:
public Player_Information(){
super();
playerName();
}
头等舱:
public class Player_Information {
Scanner inputName = new Scanner(System.in);
private String playerOneName;
void playerName() {
System.out.print("What is your name? - ");
playerOneName = inputName.nextLine();
System.out.println("Greetings " + playerOneName + "!\n");
}
public String getPlayerOneName() {
return playerOneName;
}
public void setPlayerOneName(String playerOneName) {
this.playerOneName = playerOneName;
}
}
第二课:
public class Locations {
Player_Information plIn = new Player_Information();
public void startingHouse() {
System.out.println(plIn.getPlayerOneName() + ": Agh.. What happened..");
}
}
我指的是getPlayerOneName()
类中的Player_Information
,为什么它会返回null
?
谢谢:)
答案 0 :(得分:2)
您将获得null,因为您从未初始化playerOneName。此String在PlayerName()方法中初始化为inputName.nextLine();
的值。为了在使用getPlayerOneName()方法时获得值,必须首先初始化变量playerOneName。在您的程序中,方法PlayerName()初始化变量,因此首先调用该方法。
public class Locations {
Player_Information plIn = new Player_Information();
public void startingHouse() {
plIn.PlayerName(); // call this first to initialize playerOneName;
System.out.println(plIn.getPlayerOneName() + ": Agh.. What happened..");
}
}
处理此错误的一种更好的方法是在您的Player_Information类中添加一个构造函数,该类可以初始化该变量。下面代码中的某些内容可以...
/*add this to your Player_Information class at the beginning */
public Player_Information(){
super();
//one option is to set a value to playerOneName here...
playerOneName = "set whatever string value you want to use here";
//or...call PlayerName() here instead.
PlayerName();
}
答案 1 :(得分:1)
您需要先调用此方法playerName()
,因此:
plIn.playerName();//this will prompt for input
System.out.println(plIn.getPlayerOneName() + ": Agh.. What happened..");
但是,整个设计看起来很奇怪。我建议将您的扫描仪与Player_Information
课程分开。并为Player_Information
添加一个setter。
答案 2 :(得分:0)
此行Player_Information plIn = new Player_Information();
调用Player_Information
的默认构造函数(因为您没有定义一个),并且您从未初始化playerOneName
字段(因为您没有调用playerName()
字段1}}方法。您可以定义像这样的构造函数
public Player_Information() {
super();
playerName(); // <-- will invoke the function on instantiation.
}
答案 3 :(得分:0)
创建对象时
Player_Information plIn = new Player_Information();
此时属性playerOneName为null,因此您需要调用方法playerName来设置属性值。