-12

コードで問題が発生しました。答えが 9 であることはわかっていますが、私のコードでは 0 が出力され、その理由がわかりません。私はそれを実行するために2つのクラスを持っています。動作するかどうかを確認するためのメソッド クラスとテスター クラス。誰でも私のエラーを見つけることができますか?

public class Robot
{
private int[] hall;
private int pos;
private boolean facingRight;

private boolean forwardMoveBlocked()
{
    if (facingRight) 
    {
        return pos == hall.length - 1;
    }
    else
    {
    return pos == 0;
    }
}

private void move()
{
    if (hall[pos] > 0)
    {
        hall[pos]--;
    }

    if (hall[pos] == 0
    {
        if (forwardMoveBlocked())
        {
            facingRight = !facingRight;
        }
        else
        {
            if (facingRight) 
            {
                pos++;
            }
            else
            {
                pos--;
            }
        }
    }
}

public int clearHall()
{
    int count = 0;
    while (!hallIsClear())
    {
        move();
        count++;
    }
    return count;
}

public boolen hallIsClear()
{   
    return true;
}
}

これが私のテスタークラスのコードです

public class Tester
{
    public static void main(String[] args)
    {
        Robot RobotTest = new Robot();
        System.out.println( RobotTest.clearHall() );
    }
}
4

2 に答える 2

11

あなたのwhileループは NOThallIsClear()を呼び出します。これは常に を返しますtrue

したがって、 の呼び出しmove()もインクリメントもcount行われません。

の値はそのままで返されますcount0

ちなみに、あなたのコードはコンパイルされhallIsClear()ませboolenboolean

于 2013-11-01T16:42:03.857 に答える
1

HallIsClear は常に true を返すためです。

電話すると

 while (!hallIsClear())
    {
        move();
        count++;
    }

HallIsClear は常に true を返すため、ループは実行されません。一方、次のように変更する場合は、

while (hallIsClear())

無限ループになります。コードでは別の設計に従う必要があります。

于 2013-11-01T16:42:58.440 に答える