我的程序中出现了逻辑错误。谁能发现什么错了?

时间:2013-01-12 00:33:14

标签: logic

下面的列表应该是我的程序的结果。虽然,对于#2我得到“荷马开门”。我不知道我是否盯着错误。我已经研究了一段时间的代码而且困了肯定没有帮助。任何帮助表示赞赏!

  1. //巴特锁门。
  2. //荷马试图打开门,但不能因为它被锁定了。
  3. //荷马打开门。
  4. //荷马开门。
  5. //巴特试图打开门,但不能因为它已经打开了。
  6. // Marge关门。
  7. //荷马试图关上门,但不能,因为它已经 闭合。
  8. //丽莎打开门。
  9. //亚伯拉罕试图锁门,但不能因为它打开了。
  10. // Marge关门。
  11. //亚伯拉罕把门锁上。
  12. //巴特试图打开门,但不能因为它被锁住了。
  13. //丽莎试图打开门,但不能因为它被锁住了。
  14. //荷马试图打开门,但不能因为它被锁定了。
  15. //亚伯拉罕打开门。
  16. //荷马开门。
  17. // Marge关上门。

    //in a separate method:
    
    bart.lockDoor();
    homer.openDoor();
    homer.unlockDoor();
    homer.openDoor();
    bart.openDoor();
    marge.closeDoor();
    homer.closeDoor();
    lisa.openDoor();
    abraham.unlockDoor();
    marge.closeDoor();
    abraham.lockDoor();
    bart.openDoor();
    lisa.openDoor();
    homer.openDoor();
    abraham.unlockDoor();
    homer.openDoor();
    marge.closeDoor();
    
     boolean locked;
     boolean open;
    
     public void lockDoor()
    {
        if(locked == true)
            out.println( name + " tries to lock the door, but can't because its already locked.");
            else
                if(open == false)
                {
                    locked = true;
                    out.println( name + " locks the door.");
    
                }
    }
    
    public void unlockDoor()
    {
        if(open == true)
            out.println( name + " tries to unlock the door, but can't because its open.");
                else
                    if(locked == false)
                        out.println( name + " tries to unlock the door, but can't because its already unlocked.");
                        else
                            if(locked == true)
                            {
                                out.println( name + " unlocks the door.");
                                locked = false;
                            }
    
    }
    
    public void openDoor()
    {
        if(open == true)
            out.println( name + " tries to open the door, but can't because its already open.");
            else
                if( locked == true )
                    out.println( name + " tries to open the door, but can't because its locked.");
                    else
                        if(locked == false)
                        {
                            out.println( name + " opened the door.");
                            open = true;
                        }
    
    }
    
    public void closeDoor()
    {
        if(open == false)
            out.println( name + " tries to close the door, but can't because its already closed.");
            else
            {
                if(open == true)
                {
                    out.println( name + " closed the door.");
                    open = false;
                }
    
            }
    }
    

1 个答案:

答案 0 :(得分:1)

你没有指定语言或完整的程序,但看起来问题是每个人都有(有效地)自己的门,独立于每个人的门,因为每个人都有自己的锁定/打开标志跟踪他们的门。

如果你想只有一扇门,你需要让所有人共享一个锁定和单开的旗帜。根据您使用的语言,您可以通过制作标记static来实现此目的。或者,您可以将它们放在一个单独的“门”对象中,让所有“人”对象引用“门”

相关问题