"Исключение в потоке" main "java.lang.NullPointerException" - PullRequest
0 голосов
/ 11 мая 2011

Я пытаюсь запустить программу, которая, если все пойдет хорошо, сможет занять год и вернуть название альбома, выпущенного в этом году.Я дал ему уже 6 альбомов и сейчас пытаюсь напечатать название.Я исправил несколько довольно неприятных ошибок, но я не видел их раньше.Ошибка появляется в строке 21, но я не уверен, что это значит.Кто-нибудь может помочь?

package songselector;

import java.util.Scanner;

public class Main {
    public class Album
    {
int year; String title;
public Album () {
this.year = 0; this.title = null;
        }
public Album (int year, String title) {
this.year = year; this.title = title;
     }
    }

   class CAKE {
Album[] albums;
public CAKE () {
albums = new Album[6];
albums[0].year = 1994; albums[0].title = "Motorcade Of Generosity";
albums[1].year = 1996; albums[1].title = "Fashion Nugget";
albums[2].year = 1998; albums[2].title = "Prolonging The Magic";
albums[3].year = 2001; albums[3].title = "Comfort Eagle";
albums[4].year = 2004; albums[4].title = "Pressure Chief";
albums[5].year = 2011; albums[5].title = "Showroom of Compassion";
     }

public void printAlbum (int y) {
System.out.println (albums[y].title);
    }

    }

    public static void main(String[] args) {
        new Main().new CAKE().printAlbum (0);
    }
}

Ответы [ 2 ]

3 голосов
/ 11 мая 2011

Это означает, что вы пытаетесь получить доступ / вызвать метод для объекта, который является нулевым. В вашем случае вы инициализировали массив альбомов, но не инициализировали каждый из альбомов в массиве.

Вам нужно инициализировать каждый альбом в массиве:

albums = new Album[6];
albums[0] = new Album();
albums[0].year = 1994; 
albums[0].title = "Motorcade Of Generosity";
...

Или даже проще (как указал @entonio):

albums = new Album[6];
albums[0] = new Album(1994, "Motorcade Of Generosity");
albums[1] = new Album(1996, "Fashion Nugget");
...

Так как у вас есть правильный конструктор.

Еще одна вещь: не вызывайте более одного метода в каждой строке, это поможет вам отладки.

1 голос
/ 11 мая 2011

Когда вы выделяете массив объектов, он заполняется нулевыми значениями. Вам нужно создать объекты, чтобы заполнить их. Ваш albums[0] не был создан, поэтому попытка получить доступ к его полю year (даже для записи) приводит к NPE.

...