Почему я получаю null после инициализации строки?

#java #string #null #println

#java #строка #null #println

Вопрос:

Я не понимаю, почему Sp1.location возвращает 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.*;
  

Это мой другой класс

 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 amp; 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) {


    }

}
  

Ответ №1:

Поскольку вы не устанавливаете location , вы назначаете ввод pokemon вместо iniLocation , и когда вы вызываете функцию для получения местоположения, вы получаете обратно значение iniLocation , которому не было присвоено никакого значения, поэтому, следовательно, null . Читать комментарии в коде

 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);
  }
}