自己的 NullPointerException class
NullPointerException with own class
我有点迷茫...我正在学习 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.");
}
}
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;
}
}
从外观上看,您正在创建数组,但它还不包含对象。您可能希望在构造函数中使用它。
questionItems = new QuestionItem[arraySize];
for(int i = 0; i < questionItems.length; i++) {
questionItems[i] = new QuestionItem();
}
当您像这样初始化对象数组时:
questionItems = new QuestionItem[arraySize];
默认情况下所有值都是null
。
在 addQuestionItem
中,您尝试调用数组中对象的方法。但是,该对象从 null 开始,因此这行代码不起作用:
questionItems[count++].setItemText(s);
您需要做的是在设置文本之前初始化对象:
questionItems[count] = new QuestionItem();
questionItems[count].setItemText(s);
count++;
或者,您可以,并在初始化数组时初始化所有对象。
我有点迷茫...我正在学习 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.");
}
}
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;
}
}
从外观上看,您正在创建数组,但它还不包含对象。您可能希望在构造函数中使用它。
questionItems = new QuestionItem[arraySize];
for(int i = 0; i < questionItems.length; i++) {
questionItems[i] = new QuestionItem();
}
当您像这样初始化对象数组时:
questionItems = new QuestionItem[arraySize];
默认情况下所有值都是null
。
在 addQuestionItem
中,您尝试调用数组中对象的方法。但是,该对象从 null 开始,因此这行代码不起作用:
questionItems[count++].setItemText(s);
您需要做的是在设置文本之前初始化对象:
questionItems[count] = new QuestionItem();
questionItems[count].setItemText(s);
count++;
或者,您可以