【问题标题】:How to return the first result in an ArrayList using iterator如何使用迭代器返回 ArrayList 中的第一个结果
【发布时间】:2015-02-03 02:12:37
【问题描述】:

我正在研究一个机器人迷宫,机器人可以在其中找到目标而不会撞到墙壁。作为一种“回溯”方法,我需要机器人像第一次遇到路口时那样朝相反的方向前进。这是我的代码:

【问题讨论】:

  • 如果我理解正确的话,你的机器人需要“记住”在一个特定的路口 (x,y),对吧?我认为这是因为当您随机选择多个可用路径之一时,您不想选择之前已经选择的路径。如果我对此有误解,请纠正我。
  • @ChthonicProject 是正确的。我通过将它们存储在数组列表中来“记住”它遇到的所有连接。然而,当它已经走完所有的路径时,它需要沿着它最初来的路径走。这有意义吗?
  • 仅供参考:这是“何时使用递归”一书中的经典问题,可以通过使用递归更优雅地解决。只是为了理解递归,你首先需要理解递归。 ;)
  • 啊,我明白了。但在那种情况下,ArrayList<Junction> 上的get(0) 不应该给你你需要的吗?

标签: java arraylist iterator


【解决方案1】:

在 while 循环中,您遇到的问题似乎没有通过最后一个路口...这是设计使然吗?或者应该是

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

如果这有帮助或者我误解了您的要求,请告诉我

【讨论】:

  • 我认为我没有正确解释我的问题。有时,机器人会多次穿过路口。我需要从第一次遇到到达的航向时找到它。
【解决方案2】:

这应该可行。我认为您在完成初始 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;
}

希望这能解决问题。

【讨论】:

  • 很好地考虑到有一个空列表,永远不会出现这种情况,因为这个方法只有在它之前遇到过这个结点时才会被执行。其次,我认为我没有正确解释我的问题。有时,机器人会多次穿过路口。我需要从第一次遇到到达的航向时找到它。
  • 那么如果机器人已经到过一个路口一次,是不是应该不增加一个新的路口呢?您的代码现在似乎每次都添加一个新的联结,即使您已经去过那里。在这种情况下,我的回答会奏效。如果我仍然对您的问题的解释有误,请随时进一步解释。
  • 规范是每次都应该添加一个新的Junction。我只需要能够在第一次遇到它时返回。
  • 我就是这么想的。在这种情况下,我提供的代码段将起作用。如果您正在寻找它第一次穿过该路口,它将返回与列表中当前位置匹配的第一个路口。
  • 我尝试编译它,但它需要初始化 currentJunction
猜你喜欢
  • 1970-01-01
  • 2022-08-17
  • 2019-10-05
  • 2014-12-18
  • 1970-01-01
  • 2020-02-09
  • 1970-01-01
  • 2023-01-08
  • 1970-01-01
相关资源
最近更新 更多