2015-09-24 88 views
0

試圖創建一個簡單的程序,該程序有三個文本輸入選項。如果用戶鍵入三者中的一個,則程序繼續。如果用戶鍵入其他內容,則程序將循環返回並再次請求輸入,直到給出適當的響應。 使用下拉列表或其他方法將不起作用,因爲這是用於分配的。Java do-while多字符串驗證

System.out.print("Enter one of the following: cheese, water, or burger: "); 
     userMedium = user_input.nextLine(); // store user input as a string 
     mediumConvert = userMedium.toLowerCase(); 

     boolean verifyName; 
     if (mediumConvert.equals("cheese") || mediumConvert.equals("water") || mediumConvert.equals("burger")){ 
      verifyName = false; 
     } else { 
      verifyName = true; 
     } 

     while (verifyName = true){ 
      System.out.println("Please input a valid medium (cheese, water, or burger): "); 
      userMedium = user_input.nextLine(); 
      mediumConvert = userMedium.toLowerCase(); 
     } 

這是我迄今爲止設置的,但是這只是不斷重複循環OVER AND OVER。在本節之後,我想執行一個switch來解決三個正確答案中的每一個。

我已經花了最後一小時在谷歌和YouTube上,但我發現的一切都是使用整數。當它只是一個數字和一個操作數時,驗證用戶輸入似乎很容易。但是,我如何使用三種可能的字符串?

回答

5
while (verifyName = true) 
        ↑ 

分配而不是比較。賦值表達式返回分配的值,所以你的循環相當於:

while (true) 

您應將其更改爲:

while (verifyName) 

基本上,你應該寫while (verifyName == true),但因爲它是多餘的這就像問「verifyName的值是否爲真?」。此外,它可以防止潛在的錯誤,就像剛插入一個=,而不是兩個..

+0

太棒了!這工作。我還必須在while語句中添加布爾變更代碼以擺脫循環。謝謝一堆! –

+0

@JasonGoss正確,這是另一個錯誤。我很高興它適合你! – Maroun

2

注意的兩點:1。 )這樣做

while(verify = true) 

你實際上true分配值verifyName。您需要使用

while(verifyName) 

2.)您在哪裏重新分配verifyName的值? 您應該驗證並重新分配while塊。

此外,您應該考慮更清潔的替代解決方案,但可以等待另一天。

1

你永遠不會跳出while循環,因爲在循環內部永遠不會更新變量verifyName。這意味着你將永遠不會執行循環,因爲用戶插入了你想要的輸入,否則你將最終產生無限循環。

您需要在循環內進行輸入驗證,並且還要注意布爾驗證。 類似於:

while (verifyName) { 
    System.out.println("Please input a valid medium (air, water, or steel): "); 
    userMedium = user_input.nextLine(); 
    mediumConvert = userMedium.toLowerCase(); 
    if (mediumConvert.equals("cheese") || mediumConvert.equals("water") || mediumConvert.equals("burger")){ 
     verifyName = false; 
    } else { 
     verifyName = true; 
    } 
}