2016-05-13 88 views
0

我正在寫一個基於小型文本的文本遊戲,並且遇到while循環時遇到了問題。While循環和方法的問題(不會正確退出循環)

獲得輸入的第二時間的主要方法是把它們發送回所述方法的開始(每個房間在起始庫是一個方法,如下所示:

public static void elseoverseeroffice() 
    {    
     command = in.nextLine(); 

     if (command.equals("look around") || command.equals("l") || command.equals("look")) 
     { 
      overseeroffice(); 
     } 

這是一個小我在做什麼的例子:

我擁有它,所以當玩家檢查一個終端時,它會進入終端的循環:(while循環在底部,其他文本在那裏用於上下文。 ();只是延遲打印出來的很酷的效果)

public static void overseerterminal() 
    { 
       delay(); 
        System.out.println("================================================"); 
        delay(); 
        System.out.println("=  VAULT 9 OVERSEER TERMINAL    ="); 
        delay(); 
        System.out.println("================================================"); 
        delay(); 
       System.out.println("\n > VAULT 9 OVERSEER INSTRUCTIONS"); 
        delay(); 
        if(elevator_sys==false) 
        {System.out.println(" > ACTIVATE ELEVATOR SYSTEM");} 
        else 
        {System.out.println(" > DEACTIVATE ELEVATOR SYSTEM");} 
        delay(); 
        if(saferevealed==false) 
        {System.out.println(" > REVEAL SAFE");} 
        else 
        {System.out.println(" > HIDE SAFE");} 
        System.out.println(" > EXIT"); 
        delay(); 
        delay(); 
       System.out.println("\n TYPE YOUR SELECTION"); 

       while (!command.equals("vault 9 Overseer Instructions") || !command.equals("VAULT 9 OVERSEER INSTRUCTIONS") || !command.equals("ACTIVATE ELEVATOR SYSTEM") || !command.equals("activate elevator system") || !command.equals("REVEAL SAFE") || !command.equals("reveal safe") || command.equals("exit")) 
       { 
         command = in.nextLine(); 

我有許多選項可以在終端中完成,所有這些都可以循環回終端。你可以在這個終端上鍵入的最後一個命令是

    else if (command.equals("exit")) 
        { 
         System.out.println("You shut down the terminal."); 
         elseoverseeroffice(); 
         break; 
        } 

我休息一下那裏停止循環,但如果是監督員辦公室之前,它不跑,如果我有突破然後elseoverseeroffice();在while循環之外,會發生什麼情況是,如果我在房間中鍵入的命令不是有效的命令,則會將播放器放回終端循環。

下面是命令行的一些複製和粘貼文本:

You press a button on the terminal, and it springs to life, displaying the  need to input a password. 
Type the password. 
excalibur 
================================================ 
=  VAULT 9 OVERSEER TERMINAL    = 
================================================ 

> VAULT 9 OVERSEER INSTRUCTIONS 
> ACTIVATE ELEVATOR SYSTEM 
> REVEAL SAFE 
> EXIT 

TYPE YOUR SELECTION 
exit 
You shut down the terminal. 
look around 

**Overseer's Office** 
This small important looking room is lit by a circular light. 


A central round desk sits in the middle of the room. 

There is an entrance to your east. 
what 
what 
INVALID COMMAND 
I am back in the terminal 
INVALID COMMAND 
exit 
You shut down the terminal. 
see 

我不知道發生了什麼。只有當我在房間裏時,它纔會讓我回到終端方法。我可以在另一個房間犯錯誤(每個房間都是一種方法,因爲它們是個人的),它會說「你不能那樣做」。

任何幫助?我知道這很長,但如果你需要更多的代碼,告訴我什麼,我會評論它。我不想上傳整個程序。

P.S 這也發生在我的程序的後期部分。這整個事情運行在玩家的健康狀況大於0,並且我有一個空間給玩家。 如果玩家進入另一個房間的另一個循環,然後進入instakill房間,他們不會被殺死。也許我應該有導致最終遊戲的方法,我不確定。

謝謝你們,先在這裏發帖。

+0

第一件事情,要麼你必須做出退出聲明更低字母或你需要改變,而(str.equalsIgnoreCase(「字符串匹配」) – emotionlessbananas

+0

是啊,我只是看着我的代碼...我有(while)(.... || command.equals(「exit」),而不是||!command.equals(「exit」) –

回答

1

應該

while ((!command.equalsIgnoreCase("vault 9 Overseer Instructions") && 
    !command.equalsIgnoreCase("activate elevator system") && 
    !command.equalsIgnoreCase("reveal safe")) || command.equalsIgnoreCase("exit")) 
+0

爲什麼不使用'equalsIgnoreCase()'將其減半? – Andreas

+0

或者更短:'command.matches(「(我)庫9監督員說明|激活電梯系統|揭示安全嗎?」)' – Andreas

+0

@Andreas我甚至沒有看 –