2016-04-10 7 views
0

Я пытаюсь добавить имя и длину воспроизведения для программы управления театром. Я хочу иметь возможность добавлять новые пьесы, которые будут показаны в театре. В настоящее время я следующее для класса Play и его подклассов LocalPlay и ForeignPlayNullPointerException при добавлении нового объекта в массив

public class Play { 
public String name; 
public double length; 

public Play(String name, double length){ 
    this.name = name; 
    this.length = length; 
} 


public void printPlayList(){ 
    System.out.print("name = " + this.name); 
    System.out.print("length - " + this.length); 
} 

} 


class ForeignPlay extends Play{ 

public ForeignPlay(String name, double length){ 
    super(name, length); 
} 

} 

class LocalPlay extends Play{ 

public LocalPlay(String name, double length){ 
    super(name, length); 
} 

} 

Для моего администратора класса (класса я хочу использовать функцию addPlay внутри), я пытаюсь добавить новые объекты к классу пропускания String и double. Это мой код:

public class Admin extends User{ 

private Play [] play; 
private int size = 0; 

public void addForeignPlay(String name, double length){ 
    this.play[size] = new ForeignPlay(name,length); 
    this.size++; 
} 

public void addLocalPlay(String name, double length){ 
    this.play[size] = new LocalPlay(name,length); 
    this.size++; 
} 

public void playDetails(){ 
    for(int i = 0; i < this.size; i++) 
    this.play[i].printPlayList(); 
} 

public static void main (String[] args){ 
    Admin testAdmin = new Admin(); 
    testAdmin.addLocalPlay("test", 125); 
    testAdmin.playDetails(); 
} 

} 

При попытке запуска этого я бы ожидать, чтобы иметь выход «Test» и 125,0. Тем не менее, я получаю сообщение об ошибке:

Исключение в потоке "основной" java.lang.NullPointerException на Admin.addLocalPlay (Admin.java:18) на Admin.main (Admin.java:33)

Спасибо любезно за любую помощь вы можете предоставить

+0

Вы не инициализирующий 'play' массив в любом месте, так что нулевая .. –

+0

Возможный дубликат [Что такое исключение Null Pointer и как его исправить?] (http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how-do-i-fix-it) –

ответ

1

Заменить private Play [] play; с private Play [] play = new Play[10]; без инициализации массива не может хранить любое значение в этом массиве

+0

Спасибо, что это сработало! –

+0

Большинство Добро пожаловать :). Пожалуйста, примите aswer – Rehman

0

Предложение для Admin класса:

public class Admin extends User { 

    private ArrayList<Play> playList = new ArrayList<>(); 

    public void addForeignPlay(String name, double length) { 
     this.playList.add(new ForeignPlay(name, length)); 
    } 

    public void addLocalPlay(String name, double length) { 
     this.playList.add(new LocalPlay(name, length)); 
    } 

    public void playDetails() { 
     for (int i = 0; i < playList.size(); i++) { 
      this.playList.get(i).printPlayList(); 
     } 
    } 

    public static void main(String[] args) { 
     Admin testAdmin = new Admin(); 
     testAdmin.addLocalPlay("test", 125); 
     testAdmin.playDetails(); 
    } 
} 
0

В Java, массивы не являются динамическими (размер фиксирован и определяется при его создании). Если вам нужна динамическая структура данных, вы должны использовать пример ArrayList.

0

Вы должны инициализировать переменную играть как

private Play [] play = new Play[100] 

или использовать конструктор

public Admin(Play[] play, int size) { 
    this.play = play; 
    this.size = size; 
}