-12

我的代码遇到了问题。我知道答案是 9,但我的代码打印出 0,我不知道为什么。我有 2 节课让它运行。一个方法类和一个Tester类,看看它是否有效。谁能发现我的错误?

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循环调用 NOT hallIsClear(),它又总是返回true

因此,不会调用move()或增加 of count

的值count保持不变0并按原样返回。

顺便说一句,您的代码不会编译,因为hallIsClear()返回boolen而不是boolean.

于 2013-11-01T16:42:03.857 回答
1

因为 hallIsClear 总是返回 true。

你打电话时

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

循环永远不会运行,因为 hallIsClear 总是返回 true。另一方面,如果您将其更改为

而 (hallIsClear())

会有一个无限循环。您必须在代码中遵循不同的设计。

于 2013-11-01T16:42:58.440 回答