0

我的任务是为 karel 机器人创建一个算法,用于退出迷宫并在到达蜂鸣器时停止。我已经成功地创建了这个算法,除了让 karel 在它到达蜂鸣器时停止。这只是我的代码的一部分,但你会看到我基本上在每一步都插入了一个蜂鸣器检查点。我不禁觉得有一种更简单的方法,另外,当我尝试使用新插入的蜂鸣器检查执行时,它给了我这个错误:线程“main”中的异常 java.lang.StackOverflowError

    while(!arg.rightIsClear() && arg.frontIsClear() && !arg.nextToABeeper())
    {
        arg.move();
    }
    if(arg.rightIsClear() && !arg.nextToABeeper())
    {
        arg.turnRight();
        arg.move();

所以,如果可能的话,我想简单地在整个程序的每个时间间隔检查一个 if 语句。谢谢。

4

2 回答 2

1

我认为:在 Java 中创建自定义事件是您正在寻找的。

当您不小心在循环中调用相同的方法时,通常会发生 stackoverflow。这段代码是位于任一方法中turnRight()还是move()

于 2013-07-29T14:33:55.373 回答
1

想象一下,在 Karel 编程语言中有“总体 if 语句”之类的东西。为了争论,我们称它为“何时”。现在假设您编写了以下代码:

when (facingEast())
{
    turnLeft();
}

when (facingEast())
{
    turnRight();
}

如果卡雷尔面向东方会发生什么?应该左转吗?他应该右转吗?是不是应该只做其中一件,因为转身后就不再面向东方了?或者他应该两者都做?如果是这样,按什么顺序?请注意,这会使他再次面向东方,并且他会陷入无限循环。

如上例所示,这样的“总体 if 语句”会很快导致歧义和矛盾。把它放在编程语言中没有多大意义。

我的任务是为 karel 机器人创建一个算法,用于退出迷宫并在到达蜂鸣器时停止。

然后我会提出以下基本算法布局:

while (noBeepersPresent())
{
    turnInTheDesiredDirection();   // you have to write this method
    move();
}

这样,Karel 将在每次移动后检查蜂鸣器。

于 2014-09-07T17:41:30.157 回答