【问题标题】:NullPointerException with own class [duplicate]具有自己的类的 NullPointerException [重复]
【发布时间】:2015-07-05 01:10:50
【问题描述】:

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

我们应该先用德语编程(为了我们大家之间的一致),所以我会尝试翻译它,这样对你来说更容易阅读。 我的问题是,它抛出异常(编译时)如下:

线程“主”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.");

    }

}

通讯。投票:

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

【问题讨论】:

  • 这个问题不是重复的。仅仅因为他得到 NullPointerException 错误并不意味着它与其他 NullPointerException 问题相同......

标签: java arrays class initialization


【解决方案1】:

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

questionItems = new QuestionItem[arraySize];

所有值默认为null

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

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

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

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

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

【讨论】:

  • 谢谢 - 我不知道我必须“再次”初始化它们。但是你描述得很好,所以它是有道理的:)
  • 很高兴我能帮上忙 :)
【解决方案2】:

从外观上看,您正在创建数组,但它还没有包含对象。您可能希望在构造函数中使用它。

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

【讨论】:

  • @AnubianNoob 为什么不是解决方案?它确保所有数组项都是实际对象。
  • 哦,我的错,我看错了。对于那个很抱歉。很好的解决方案 +1。
  • 谢谢 - 我想我会使用 Anubians 解决方案,但你的解决方案现在也在我的“笔记”中 :)
猜你喜欢
  • 2011-07-11
  • 1970-01-01
  • 2021-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-11
  • 1970-01-01
相关资源
最近更新 更多