如何创建一个总体if语句?如同,“如果这发生在程序的任何一点......”

时间:2013-07-29 14:31:01

标签: java 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语句,如果可能的话。感谢。

2 个答案:

答案 0 :(得分:1)

我认为:Create a custom event in Java正是您所寻找的。

当您在循环中意外调用相同的方法时,通常会发生堆栈溢出。这段代码是否位于turnRight()move()

方法中

答案 1 :(得分:1)

想象一下,有一个像"一个总体的if语句"在卡雷尔编程语言中。为了争论,让我们称之为"当"。现在假设您编写了以下代码:

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

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

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

正如上面的例子所示,这样的"一个总体的if语句"很快就会导致含糊不清和矛盾。将它放在编程语言中没有多大意义。

  

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

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

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

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