我的任务是为卡雷尔机器人创建一个算法,用于退出迷宫并在它到达蜂鸣器后停止。我已经成功创建了这个算法,除了让karel在到达蜂鸣器时停止。这只是我代码的一部分,但你会发现我基本上都是在每一步都插入一个蜂鸣器检查点。我不禁觉得有一种更简单的方法,而且,当我尝试使用新插入的蜂鸣器检查时,它给了我这个错误:线程“main”中的异常java.lang.StackOverflowError
while(!arg.rightIsClear() && arg.frontIsClear() && !arg.nextToABeeper())
{
arg.move();
}
if(arg.rightIsClear() && !arg.nextToABeeper())
{
arg.turnRight();
arg.move();
所以,我想简单地在整个程序的每个时间间隔都检查一个if语句,如果可能的话。感谢。
答案 0 :(得分:1)
我认为:Create a custom event in Java正是您所寻找的。 p>
当您在循环中意外调用相同的方法时,通常会发生堆栈溢出。这段代码是否位于turnRight()
或move()
?
答案 1 :(得分:1)
想象一下,有一个像"一个总体的if语句"在卡雷尔编程语言中。为了争论,让我们称之为"当"。现在假设您编写了以下代码:
when (facingEast())
{
turnLeft();
}
when (facingEast())
{
turnRight();
}
如果卡雷尔面向东方会发生什么?转弯了吗?他应该向右转吗?他应该只做其中一件事,因为在他转身之后,他不再面向东方?或者他应该两个都做?如果是这样,按什么顺序?请注意,这会让他再次面向东方,他会陷入无限循环。
正如上面的例子所示,这样的"一个总体的if语句"很快就会导致含糊不清和矛盾。将它放在编程语言中没有多大意义。
我的任务是为卡雷尔机器人创建一个算法,用于退出迷宫并在它到达蜂鸣器后停止。
然后我会提出以下基本算法布局:
while (noBeepersPresent())
{
turnInTheDesiredDirection(); // you have to write this method
move();
}
这样,Karel将在每次移动后检查蜂鸣器。