java - 带有自己类的 NullPointerException

标签 java arrays class initialization

<分区>

我有点迷茫...我正在学习 Java 并且必须编写一个小型轮询命令行应用程序。

我们应该先用德语编写程序(为了我们所有人之间的一致性),所以我会尝试翻译它,以便您更容易阅读。 我的问题是,它抛出异常(在编译时)如下:

Exception in thread "main" java.lang.NullPointerException

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

at 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.");

    }

}

交流。投票:

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

计算.问题项:

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

最佳答案

当你像这样初始化一个对象数组时:

questionItems = new QuestionItem[arraySize];

默认情况下,所有值都是 null

addQuestionItem 中,您尝试调用数组中对象的方法。但是,该对象从 null 开始,因此这行代码不起作用:

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

您需要做的是在设置文本之前初始化对象:

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

或者,您可以执行 what Constant suggested , 并在初始化数组时初始化所有对象。

关于java - 带有自己类的 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29881224/

相关文章:

java - Okhttp 或 HTTPClient : Which offers better functionality and more efficiency?

java - 分析 JVisualVM 配置文件 - 寻找大量原始类型的来源?

java - 在 SSL 中使用 Spring BOOT 进行 SOAP 身份验证

Python 错误 : missing 1 required positional argument: 'self'

java - Break语句不存储数据,仅返回最后输入的值

linux - 如何在 Ubuntu 11.10 上正确配置 Oracle Java JDK 7(不是 Open JDK)并运行带有引用 JAR 文件的 Java 程序?

c++ - int[n][m],其中 n 和 m 在运行时已知

javascript - 如何将来自 setInterval 的数据推送到数组中

python - 在 python 中切片 2D numpy 数组

python - 如何使用类显示与矩形位置相关的字体?