为什么我初始化一个字符串后得到的是null?
Why do I get null after I initialized a string?
我不明白为什么 Sp1.location returns NULL。如果我 运行 它接缝的程序我可以成功初始化位置。我以类似的方式将属性编码为整数,但这没有给我带来任何问题。
public class Database {
static Scanner userInput = new Scanner(System.in);
public static void main(String[] args) {
System.out.println("Add a new spawnpoint.\n");
System.out.println("State the name of this spawnpoint: ");
Spawnpoints Sp1 = new Spawnpoints(getSpawnName());
System.out.println("Done");
System.out.println("Location: " + Sp1.getLocation()); //return as null
}
public static String spawnName;
public static String getSpawnName() {
spawnName = userInput.next();
return spawnName;
}
public void setSpawnName(String spawnName) {
this.spawnName = spawnName;
}
}
// Import libraries
import java.util.*;
这是我的另一个class
public class Spawnpoints extends Database {
// Define scanner, so you can accept user input
static Scanner userInput = new Scanner(System.in);
// Define attributes of Spawnpoints
private String location;
private String iniLocation;
// Creator, method for creating a instance of Spawnpoints. Will be the actual spawnpoints
// I include a iniLocation so no user input is asked when calling on getLocation.
public Spawnpoints(String spawnName) {
getIniLocation();
}
// Setters & Getters getLocation
private String getIniLocation() {
System.out.println("State the location of this spawnpoint:\n");
pokemon = userInput.next ();
return iniLocation;
}
public void setIniLocation(String iniLocation) {
this.iniLocation = iniLocation;
}
public String getLocation() {
location = iniLocation;
return location;
}
public void setLocation(String location) {
this.location = location;
}
public static void main (String[] args) {
}
}
因为您没有设置 location
,所以您将输入分配给 pokemon
而不是 iniLocation
并且当您调用函数以获取位置时,您会返回 iniLocation
的值,该值尚未分配任何值,因此为空。阅读代码中的注释
private String getIniLocation() {
System.out.println("State the location of this spawnpoint:\n");
pokemon = userInput.next (); // remove this
iniLocation = userInput.next (); // with this
return iniLocation;
}
如果您在构造函数中初始化 scanner
对象,这是一个很好的做法。
class AnyClass{
Scanner scan;
public AnyClass(){
scan= new Scanner(System.in);
}
}
我不明白为什么 Sp1.location returns NULL。如果我 运行 它接缝的程序我可以成功初始化位置。我以类似的方式将属性编码为整数,但这没有给我带来任何问题。
public class Database {
static Scanner userInput = new Scanner(System.in);
public static void main(String[] args) {
System.out.println("Add a new spawnpoint.\n");
System.out.println("State the name of this spawnpoint: ");
Spawnpoints Sp1 = new Spawnpoints(getSpawnName());
System.out.println("Done");
System.out.println("Location: " + Sp1.getLocation()); //return as null
}
public static String spawnName;
public static String getSpawnName() {
spawnName = userInput.next();
return spawnName;
}
public void setSpawnName(String spawnName) {
this.spawnName = spawnName;
}
}
// Import libraries
import java.util.*;
这是我的另一个class
public class Spawnpoints extends Database {
// Define scanner, so you can accept user input
static Scanner userInput = new Scanner(System.in);
// Define attributes of Spawnpoints
private String location;
private String iniLocation;
// Creator, method for creating a instance of Spawnpoints. Will be the actual spawnpoints
// I include a iniLocation so no user input is asked when calling on getLocation.
public Spawnpoints(String spawnName) {
getIniLocation();
}
// Setters & Getters getLocation
private String getIniLocation() {
System.out.println("State the location of this spawnpoint:\n");
pokemon = userInput.next ();
return iniLocation;
}
public void setIniLocation(String iniLocation) {
this.iniLocation = iniLocation;
}
public String getLocation() {
location = iniLocation;
return location;
}
public void setLocation(String location) {
this.location = location;
}
public static void main (String[] args) {
}
}
因为您没有设置 location
,所以您将输入分配给 pokemon
而不是 iniLocation
并且当您调用函数以获取位置时,您会返回 iniLocation
的值,该值尚未分配任何值,因此为空。阅读代码中的注释
private String getIniLocation() {
System.out.println("State the location of this spawnpoint:\n");
pokemon = userInput.next (); // remove this
iniLocation = userInput.next (); // with this
return iniLocation;
}
如果您在构造函数中初始化 scanner
对象,这是一个很好的做法。
class AnyClass{
Scanner scan;
public AnyClass(){
scan= new Scanner(System.in);
}
}