Я пробовал смотреть сообщения по этой проблеме, но у меня все еще есть проблемы с этой ошибкой в моем коде. Итак, в четвертой строке я создаю переменную экземпляра с именем SongDatabase
для доступа к классу SongDatabase
. Но когда я спускаюсь к линии, SongDatabase.addNewSong();
под case 1
, я получаю ошибку java.lang.NullPointerException: null.NullPointerException (Java)
Интерфейс класса:
public class Interface
{
Scanner console = new Scanner(System.in);
private SongDatabase SongDatabase;
public static void main(String[] args) {
Interface intFace = new Interface();
intFace.run();
}
private void run() {
switch (userInput) {
case 1:
SongDatabase.addNewSong();
break;
case 2:
SongDatabase.removeSong();
break;
case 3:
SongDatabase.sortSongs();
break;
default:
System.out.println("Please enter a valid number.");
break;
}
}
SongDatabase класс:
public class SongDatabase {
Scanner console = new Scanner(System.in);
private Song song1, song2, song3, song4;
public void addNewSong() {
if (song1 == null) {
song1 = getFromUser();
}
else if (song2 == null) {
song2 = getFromUser();
}
else if (song3 == null) {
song3 = getFromUser();
}
else if (song4 == null) {
song4 = getFromUser();
}
else {
System.out.println("The database is currently full. Please delete a song before adding a new one.");
}
}
Я прошел через отладчик, и я знаю, что переменная экземпляра, SongDatabase = нуль, что, вероятно, вызывает ошибку? Я раньше была линия
SongDatabase SongDatabase = new SongDatabase();
SongDatabase.addNewSong();
вместо этого, но я понял, что это создание нового объекта SongDatabase каждый раз и обтирать, что я там хранятся, поэтому мне пришлось изменить его. Я бы очень признателен за решение, потому что я понятия не имею, спасибо!
Конструкторы в основном используются для инициализации полей классов. Поэтому, надеюсь, вы не пропустите эту часть в будущем, что вы можете фактически инициализировать переменные внутри конструктора, создав ее. –
вы не должны называть класс «Интерфейс», который просто путают, для тех, кто использует интерфейсы. –