这是我的主要代码:
package onlineTest;
import java.util.HashSet;
import java.util.Iterator;
public class TestClass {
public static void main(String[] args) {
HashSet<TrueFalseQuestion> newList = new HashSet<TrueFalseQuestion>();
newList.add(new TrueFalseQuestion(1, 2, "sms", 4, true));
newList.add(new TrueFalseQuestion(2, 3, "erw", 5, false));
newList.add(new TrueFalseQuestion(3, 4, "Gray", 6, true));
Iterator<TrueFalseQuestion> iterator = newList.iterator();
while(iterator.hasNext()) {
System.out.println(iterator.next());
System.out.println(iterator.next().getPoints());
}
}
}
这是我的TrueFalseQuestion类:
public class TrueFalseQuestion {
public int examId;
public int questionNum;
public String text;
public double points;
public boolean answer;
public TrueFalseQuestion(int examId, int questionNum, String text,
double points, boolean answer) {
this.examId = examId;
this.questionNum = questionNum;
this.text = text;
this.points = points;
this.answer = answer;
}
public int getExamId() {
return examId;
}
public int getQuestionNum() {
return questionNum;
}
public String getQuestionText() {
return text;
}
public boolean getAnswer() {
return answer;
}
public double getPoints() {
return points;
}
}
当我运行我的代码时,它能够完成第一次迭代并将点打印出来,然后它为第二次迭代提供NullPointerException
。出现错误的行是:
System.out.println(iterator.next().getPoints());
我不知道问题是什么。我假设iterator.next()是当前的TrueFalseQuestion
对象,每次迭代,我都可以使用getPoints()
。
答案 0 :(得分:3)
这是因为你在每个itertor.next()
的循环中调用iterator.hasNext()
两次。
你应该这样做:
while(iterator.hasNext()) {
TrueFalseQuestion trueFalseQuestion = iterator.next();
System.out.println(trueFalseQuestion);
System.out.println(trueFalseQuestion.getPoints());
}
在您第一次迭代时会发生什么事情,当您致电:
System.out.println(iterator.next());
第一个TrueFalseQuestion
被打印出来,但是在下一个声明中,当你这样做时:
System.out.println(iterator.next().getPoints());
您在不知不觉中打印了第二个points
的{{1}}。
所以,在你进行第二次迭代时,再次执行:
TrueFalseQuestion
第三个System.out.println(iterator.next());
被打印出来,最后,当你这么做时,就在下一行:
TrueFalseQuestion
没有第四个System.out.println(iterator.next().getPoints());
而且您获得TrueFalseQuestion
,因为您在NullPointerException
值上调用了getPoints()
。
答案 1 :(得分:0)
程序中的数组值找不到您的数组,因此它显示空指针异常 注意你的数组索引以0开头