0

私の課題は、カレル ロボットが迷路を出てブザーに到達したら停止するために使用するアルゴリズムを作成することです。ブザーに到達したときにカレルを停止させることを除いて、このアルゴリズムの作成に成功しました。これはコードの一部にすぎませんが、基本的にすべてのステップでビープ チェックポイントを挿入していることがわかります。もっと簡単な方法があるように感じずにはいられません。さらに、新しく挿入したビープ音チェックを実行しようとすると、次のエラーが表示されました: Exception in thread "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でカスタムイベントを作成することがあなたが探しているものです。

通常、スタック オーバーフローは、ループ内で誤って同じメソッドを呼び出したときに発生します。このコードは、メソッドturnRight()またはのいずれかにありますかmove()?

于 2013-07-29T14:33:55.373 に答える
1

Karel プログラミング言語に「包括的な if ステートメント」のようなものがあったと想像してください。議論のために、それを「いつ」と呼びましょう。次のコードを書いたとします。

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

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

カレルが東を向いたらどうなる?左に曲がるべきですか?彼は右に曲がるべきですか?彼が向きを変えた後、彼はもはや東を向いていないので、彼はこれらのことの1つだけを行うべきですか? それとも両方やるべきですか?もしそうなら、どのような順序で?これにより、彼は再び東を向くようになり、無限ループにはまってしまうことに注意してください。

上記の例が示すように、このような「包括的な if ステートメント」はすぐにあいまいさと矛盾につながります。それをプログラミング言語に置き換えてもあまり意味がありません。

私の課題は、カレル ロボットが迷路を出てブザーに到達したら停止するために使用するアルゴリズムを作成することです。

次に、次の基本的なアルゴリズム レイアウトを提案します。

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

このようにして、Karel は各移動後にブザーをチェックします。

于 2014-09-07T17:41:30.157 に答える