0

以下のリストは私のプログラムの結果であると思われます。しかし、#2の場合、「ホーマーがドアを開ける」と表示されます。エラーをじっと見つめているかどうかはわかりません。私はしばらくの間コードを研究してきました、そして眠いことは間違いなく助けにはなりません。どんな助けでも大歓迎です!

  1. //バートがドアをロックします。
  2. //ホーマーはドアを開こうとしますが、ロックされているためできません。
  3. //ホーマーはドアのロックを解除します。
  4. //ホーマーがドアを開けます。
  5. //バートはドアを開こうとしますが、すでに開いているためできません。
  6. //マージはドアを閉めます。
  7. //ホーマーはドアを閉めようとしますが、すでに閉まっているためできません。
  8. //リサがドアを開けます。
  9. //アブラハムはドアをロックしようとしますが、ドアが開いているためロックできません。
  10. //マージはドアを閉めます。
  11. //アブラハムはドアをロックします。
  12. //バートはドアを開こうとしますが、ロックされているためできません。
  13. //リサはドアを開こうとしますが、ロックされているためできません。
  14. //ホーマーはドアを開こうとしますが、ロックされているためできません。
  15. //アブラハムはドアのロックを解除します。
  16. //ホーマーがドアを開けます。
  17. //マージはドアを閉めます。

    //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;
                }
    
            }
    }
    
4

1 に答える 1

1

言語や完全なプログラムを指定していませんが、問題は、各人が自分のドアを追跡するための独自のロック/オープンフラグを持っているため、他の人のドアとは独立して (事実上) 自分のドアを持っていることです。 .

ドアを 1 つだけにしたい場合は、すべての人に 1 つのロックされた 1 つのフラグと 1 つの開いたフラグを共有させる必要があります。使用している言語によっては、 flags を作成することでできる場合がありますstatic。別の方法として、それらを別の「ドア」オブジェクトに入れて、すべての「人」オブジェクトがその「ドア」を参照するようにすることもできます。

于 2013-01-12T00:40:02.680 に答える