在迭代

时间:2015-11-15 06:09:23

标签: java class nullpointerexception iterator hashset

这是我的主要代码:

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()

2 个答案:

答案 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开头