我如何使用迭代器来浏览Vector并找到某些对象?

时间:2014-03-31 05:39:01

标签: java vector nullpointerexception iterator

我的问题是我需要在Vector内容中找到对象,以便我可以将它们打印到面板上。但是,当我使用此代码迭代向量时,它不会到达object = it.next()行。因此,当我尝试调用对象paint方法时,它会给我一个空指针,因为对象未初始化。

 public PaintingPanel(Vector contents){
    this.contents = contents;
    Iterator it = contents.iterator();

    while(it.hasNext()){
        if(it.next().equals(ball)){
            ball = (Ball) it.next(); 
        } else if (it.next().equals(bricks)){
            bricks.add((Brick) it.next());
        } else if (it.next().equals(paddle)){
            paddle = (Paddle) it.next();
        }

2 个答案:

答案 0 :(得分:5)

Iterator每次提前一个值 .next()。在循环中,你前进三次,因此吞下三个条目!

请改为:

Object element;
while (it.hasNext()) {
    element = it.next();
    if (element.equals(ball)) // etc etc
}

此外,您不应使用Vector。不是在2014年。

使用List<X>代替X是正确的类型!


最后,你似乎还有其他问题,因为你的问题是“它没有到达object = it.next()行”。需要更多代码!鉴于你的if谓词的陌生感,这个问题看起来比那更为根本,甚至。

特别是,如果没有任何要生成的元素,则会点击NullPointerException“而不是”NoSuchElementException Iterator抛出的内容。

答案 1 :(得分:0)

您正在迭代每个if / else条件。更好地存储检索到的对象,然后进行比较。也许是这样的:

       while(it.hasNext()){
        Object itObj = it.next();
        if(itObj.equals(ball)){
            ball = (Ball) it.next(); 
        } else if ((itObj.equals(bricks)){
            bricks.add((Brick) it.next());
        } else if ((itObj.equals(paddle)){
            paddle = (Paddle) it.next();
        }