为什么这段代码打印出“0”

时间:2013-11-01 16:40:25

标签: java

我的代码遇到了问题。我知道答案是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() );
    }
}

2 个答案:

答案 0 :(得分:11)

您的while循环调用NOT hallIsClear(),而true始终返回move()

因此,不会调用count,也不会调用count的任何增量。

0的值保持在hallIsClear(),并按原样返回。

顺便说一句,您的代码无法编译,因为boolen会返回boolean而不是{{1}}。

答案 1 :(得分:1)

因为hallIsClear总是返回true。

致电时

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

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

  

while(hallIsClear())

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