2015-04-26 2 views
1

Я немного потерял ... Я изучаю Java и должен программировать небольшое приложение командной строки опроса.NullPointerException с собственным классом

Мы должны сначала запрограммировать его на немецком языке (чтобы быть согласованным между всеми нами), поэтому я попытаюсь перевести его, так что его легче читать для вас. Моя проблема в том, что он бросает исключение (при компиляции) в следующем:

Исключение в потоке "главный" java.lang.NullPointerException

в communication.Poll.addQuestionItem (Poll.java:18)

на main.PollTool.main (PollTool.java:8)

я инициализация моего массива "questionItems" неправильно? Разве я не должен так делать? Что здесь не так? Я что-то забыл? :(

main.PollTool:

package main; 
import communication.Poll; 

public class PollTool { 

    public static void main(String[] args) { 
     Poll poll = new Poll ("Best Smartphone:",3); 
     poll.addQuestionItem("iPhone"); //<--line 8 
     poll.addQuestionItem("Android"); 
     poll.addQuestionItem("Windows Phone"); 

     poll.askQuestions("This poll determines the polularity of different Smartphones."); 

    } 

} 

communication.Poll:

package communication; 
import java.util.Scanner; 
import calculations.QuestionItem; 

public class Poll { 
    private String questionTitle; 
    private QuestionItem[] questionItems; 
    private int count; 
    private Scanner in = new Scanner(System.in); 

    public Poll(String s,int arraySize){ 
     questionTitle = s; 
     questionItems = new QuestionItem[arraySize]; //<--problem here? 
    } 

    public void addQuestionItem(String s){ 
     if(count<questionItems.length){ 
      questionItems[count++].setItemText(s); // <--exception here 
     } 
    } 

    public void askQuestions(String topic){ 
     System.out.println(topic); 

     System.out.println(questionTitle); 
     for(int i=0; i<questionItems.length; i++){ 
      System.out.println("- - - "+ questionItems[i].getItemText() +" - - -"); 
      System.out.print("Your numerical answer: "); 
      questionItems[i].vote(in.nextInt()); 
     } 
    } 

    void evaluation(){ 
     //not ready :) 
    } 
} 

calculation.QuestionItem:

package calculation; 

public class QuestionItem { 
    int count; 
    int overall; 
    String text; 

    public void vote (int pointValue){ 
     overall += pointValue; 
     count++; 
    } 
    public double getDurchschnitt(){ 
     return (double) overall/count; 
    } 
    public void setItemText(String s){ 
     text = s; 
    } 
    public String getItemText(){ 
     return text; 
    } 
} 
+1

Этот вопрос не дублировался. Просто потому, что он получает ошибку NullPointerException, это не значит, что это то же самое с другими вопросами NullPointerException ... – farukdgn

ответ

6

При инициализации массива объектов, как это:

questionItems = new QuestionItem[arraySize]; 

Все значения являются null по умолчанию.

В addQuestionItem вы пытаетесь вызвать метод объекта в массиве. Тем не менее, этот объект начинается нуль, так что эта строка кода не работает:

questionItems[count++].setItemText(s); 

То, что вы должны сделать, это инициализировать объект перед установкой текста:

questionItems[count] = new QuestionItem(); 
questionItems[count].setItemText(s); 
count++; 

В качестве альтернативы, вы можете do what Constant suggested и инициализировать все объекты при инициализации массива.

+1

спасибо - я не знал, что мне нужно инициализировать их «снова». Но вы описали его довольно хорошо, так что это имело смысл :) – Rasalas

+1

Рад, что я мог помочь :) –

6

Судя по всему, вы сделать массив, но он еще не содержит объектов. Вероятно, вы захотите этого в конструкторе.

questionItems = new QuestionItem[arraySize]; 
for(int i = 0; i < questionItems.length; i++) { 
    questionItems[i] = new QuestionItem(); 
} 
+0

@AnubianNoob Почему это не решение? Он гарантирует, что все элементы массива являются реальными объектами. – RealSkeptic

+1

О, мой плохой, я неправильно понял. Извини за это. Хорошее решение +1. –

+0

спасибо - я думаю, что я буду использовать решение для анубианцев, но у вас тоже есть мои «заметки» :) – Rasalas

Смежные вопросы