2013-12-10 154 views
0

問題規範:無限循環(菜單進入無限循環);無限循環java

目標:請求用戶輸入一個整數,然後按照指定的邏輯進行編碼。如何避免無限循環?

代碼:

public Purchase groceryStoreMenu(LemonadeStand lemonadeStand){ 

    boolean getMenu = true; 
    int userEnteredNumber = -1; 
    currentPurchase = new Purchase(); 

    while(getMenu){ 
     try{ 

      System.out.println("Grocery Store"); 
      System.out.printf("%s\t%s%n%s\t%s%n%s\t%s%n%s\t%s%n%s\t%s%n%s\t%s%n" , "1:" , "Buy lemons", "2:", "Buy cups" , "3:" , "Buy sugar" , 
      "4:" , "Buy ice" , "5:" , "Done"); //change this 
      userEnteredNumber = reader.nextInt(); 

      if (userEnteredNumber == 1) { 
       money = lemonadeStand.profit(0); 
       lemonsMenu(money); 
      }else if (userEnteredNumber == 2){ 
       money = lemonadeStand.profit(0); 
       cupsMenu(money); 
      }else if (userEnteredNumber == 3){ 
       money = lemonadeStand.profit(0); 
       sugarMenu(money); 
      }else if (userEnteredNumber == 4){ 
       money = lemonadeStand.profit(0); 
       iceMenu(money); 

      }else{ 
       money = lemonadeStand.profit(0); 
      dailyGreetingMenu(); 

      } 

     if (userEnteredNumber != 1 && userEnteredNumber !=2 && userEnteredNumber != 3 
      && userEnteredNumber != 4 && userEnteredNumber != 5) { 
    throw new Exception(); 
    } else if(userEnteredNumber == 6) { 
     getMenu = false; 
     //break; 
    } else { 
     getMenu = false; 
     //break; 
    } 

    } 

    catch(Exception e) 
    { 
     System.out.println("Error in number format. Enter a valid number from the choices (1,2,3,4,5,6)"); 
    } 

    } 


    return currentPurchase; 
+2

,格式化只是......可怕......我幾乎不能讀的代碼:/ – Doorknob

+1

reader.nextInt()可能不會阻止。我會開始在那裏調試。 – tier1

+0

@ user3053348你會接受答案嗎? –

回答

5

你的計劃從未達到if(userEnteredNumber == 6) 6價值,因爲如果userEnteredNumber是6,第一個條件會抓住它:

if (userEnteredNumber != 1 && userEnteredNumber !=2 && userEnteredNumber != 3 
     && userEnteredNumber != 4 && userEnteredNumber != 5) { 
    throw new Exception(); 
} 

那麼它會拋出異常,它在循環塊內編輯爲catch。除了1,2,3,4,5,6以外的任何數字都是相同的。所以循環永遠不會結束。

我不喜歡你的代碼風格。但如果你想這樣做,你應該添加userEnteredNumber != 6第一條件。

0

看起來像執行是永遠不會進入下面的塊: else if(userEnteredNumber == 6){ getMenu = false; // break; }

如果條件不應該包含「& &」。它應該是「||」 也看起來像你不想讓你的用戶輸入除1,2,3,4,5以外的任何數字。

if (userEnteredNumber != 1 || userEnteredNumber !=2 || userEnteredNumber != 3 
     || userEnteredNumber != 4 || userEnteredNumber != 5) { 
    getMenu = false;    
    throw new Exception(); 
} 
+0

這是一個答案或只是一個侮辱的代碼評論? – nhgrif

+0

我以爲我也提供了一個見解。我能說什麼。 – Ashish

+0

你的回答是侮辱,不確定,並沒有清楚地解釋答案。如果你打算把代碼稱爲可怕的,請詳細說明它爲什麼可怕,並提供一個更好的替代例子。當你說「我認爲它應該是...」時,你聽起來不確定。如果您不確定,請不要發佈答案。 – nhgrif