Java 如何使用迭代器返回ArrayList中的第一个结果

Java 如何使用迭代器返回ArrayList中的第一个结果,java,arraylist,iterator,Java,Arraylist,Iterator,我正在制作一个机器人迷宫,在那里机器人可以在不撞墙的情况下找到目标。作为一种“回溯”方法,我需要机器人朝相反的方向移动,就像它第一次遇到交叉路口时那样。这是我的代码:在while循环中,您遇到了问题,您似乎没有经过最后一个路口。。。这是故意的吗?还是应该如此 while (junctionIterator.hasNext()) { if ((((currentJunction.x)==(robot.getLocation().x))) && ((currentJu

我正在制作一个机器人迷宫,在那里机器人可以在不撞墙的情况下找到目标。作为一种“回溯”方法,我需要机器人朝相反的方向移动,就像它第一次遇到交叉路口时那样。这是我的代码:

在while循环中,您遇到了问题,您似乎没有经过最后一个路口。。。这是故意的吗?还是应该如此

    while (junctionIterator.hasNext()) {
    if ((((currentJunction.x)==(robot.getLocation().x))) && ((currentJunction.y)==(robot.getLocation().y))) 
        break;
    currentJunction = junctionIterator.next();
}

让我知道这是否有帮助,或者我是否误解了你的要求,这应该有效。我想您可能忘记了在完成初始
Junction currentJunction=junctionIterator.next()之后继续遍历列表,因此您从未真正浏览过列表。此外,如果列表为空,在使用
next()
之前,您可能希望始终选中
hasNext()

public int searchJunction(IRobot robot) {

    boolean foundJunction = false;

    Junction currentJunction = null;

    //Iterate through list until the end, or until correct junction is found.
    while (!foundJunction && junctionIterator.hasNext()) {
        currentJunction = junctionIterator.next();
        if ((((currentJunction.x)==(robot.getLocation().x))) && ((currentJunction.y)==(robot.getLocation().y))) {
            foundJunction = true;
        }
    }

    return currentJunction;
}

希望这能澄清问题。

如果我理解正确,你的机器人需要“记住”处于某个特定的交叉点(x,y),对吗?我认为这是因为当你随机选择多条可用路径中的一条时,你不想选择一条你以前已经选择过的路径。请纠正我,如果我误解了这是正确的项目。通过将它们存储在arraylist中,我“记住”了它遇到的所有连接。然而,当它走完所有的路时,它需要走它最初走过的路。这有意义吗?仅供参考:这是《何时使用递归》一书中的经典问题,可以通过使用递归更优雅地解决。只是为了理解递归,你首先需要理解递归啊,我明白了。但是在这种情况下,在
ArrayList
上的
get(0)
不应该给你你所需要的吗?考虑到有一个空列表,那永远不会是这样,因为这个方法只有在以前遇到这个交叉点时才会执行。其次,我认为我没有正确地解释我的问题。有时,机器人会多次穿过交叉路口。我需要找到第一次遇到它时到达的航向。因此,如果机器人已经去过一次交叉路口,它是否应该添加一个新的交叉路口?您的代码现在似乎每次都会添加一个新的连接,即使您已经在那里了。那样的话,我的答案就行了。如果我仍然错误地解释了您的问题,请随意进一步解释。规范是每次都应该添加一个新的连接。我只需要能在它第一次遇到它的时候返回。这就是我的想法。在这种情况下,我提供的代码段将起作用。如果您正在查找它第一次穿过该交叉点,它将返回与列表中当前位置匹配的第一个交叉点。我尝试编译它,但它要求currentJunction为initialise我认为我没有正确解释我的问题。有时,机器人会多次穿过交叉路口。我需要找到它第一次遇到的标题。