2016-12-07 117 views
-1

我的猜測遊戲會從用戶那裏獲得5,10或20個猜測,他們應該嘗試猜測計算機選擇的隨機數。我的代碼中的所有內容都在工作,除此之外:當代碼詢問用戶是否需要5,10或20個猜測時,例如,如果用戶輸入15,而不是其中一個選項,則它會繼續並開始要求他們猜測。我需要一些類型的驗證來確保他們進入其中一個選項。因爲我是編程新手,所以我不確定在正確的方式下如何包含這些內容。我已經嘗試了幾種不同的方法,但是都會遇到錯誤。我需要的是,如果用戶輸入的數字不是選項中的一個,那麼應該再次詢問他們,直到他們輸入其中一個選項。有人能告訴我我應該怎麼做?在java中驗證用戶輸入?

+0

要改善此問題,您應該顯示您嘗試的一種或兩種方式以及獲得的錯誤。這可能不會有人會給你一個代碼,因爲這不是本網站的目的。 – Lexi

+0

你嘗試了什麼,以及你這樣做了哪些錯誤? – RamPrakash

回答

0

從一個循環內的用戶採取投入。例如:

System.out.print("How many guesses would you like? (5, 10, 20)"); 
do { 
    int numberOfGuesses = scan.nextInt(); 
    //on correct guess, break out of the loop 
    if(numberOfGuesses == 5 || numberOfGuesses == 10 || numberOfGuesses == 20) 
     break; 
System.out.print("Please enter a guess having one of these values (5, 10, 20)"); 
} while (true); 

除非用戶輸入三個值之一,否則他/她會不斷提示輸入正確的猜測值。

+0

用*相同*確切問題提示不是非常用戶友好的...提醒用戶他/她選擇了*無效*選項會更有意義。 – Idos

+0

@Idos我會更新我的答案。 – yogur

2

首先if (answer.length() ==3)是沒有意義的。 也許你的意思是:

if(answer.equals("yes")) 

此外,來完成你想我會用一個Set包含有效的猜測數字是什麼。它是可擴展的,比檢查if子句中的多個值更有意義。它看起來是這樣的:

Set<Integer> validNumberOfGuesses = new HashSet<Integer>(Arrays.asList(5, 10, 20)); 
int numberOfGuesses = scan.nextInt(); 
while (!validNumberOfGuesses.contains(numberOfGuesses)) { 
    /* ask again */ 
    System.out.println(numberOfGuesses + " is not a valid number of guesses, please try again"); 
    numberOfGuesses = scan.nextInt(); 
} 
0

Java有continue關鍵字跳轉至啓動電流回路的運行時。請參閱The Continue Statement文檔。

一旦你有你的用戶輸入,你可以這樣做

if (numberOfGuesses != 5 && numberOfGuesses != 10 && numberOfGuesses != 20) { 
    continue; // jumps to start of while loop block, without running conditional 
} 
0

當您收到「numberOfGuesses」時,您應該在繼續之前檢查該號碼的值。否則,你只需在代碼中繼續前進,因爲實際上並未驗證該數字。

創建一個返回布爾值的函數可能是一個好主意,然後你可以檢查那裏的數字。

boolean isValidOption(int number)

在函數要執行一些比較和驗證。既然你有三個選擇,你可以選擇像

if (number == 5 || ...)

你可以考慮你將如何驗證值的方法有很多。只需比較您所知道的有效數字,就可以執行一些if語句,或者將數字放入數組中,並在遍歷數組的同時比較該值,依此類推。希望能幫助你開始並快樂編碼!

編輯:最後我應該提到,但你需要考慮你的代碼流。應該使用像while(!isValidOption())這樣的somesort循環。循環指示,直到用戶輸入有效的選項。您需要考慮代碼中的操作順序,並理解計算機不會爲您考慮。它做你所說的,所以明白你在這裏試圖告訴它。例如,I want to step into my game, if and only if, the condition of isValidOption is met

0

你需要做的是留在循環,直到你輸入滿足您的需求,例如,你可以使用下面的函數

private int getNumberOfGuesses(Scanner scan) { 
     int numberOfGuesses; 
     boolean numberOfGuesesIsValid; 
     do { 
      System.out.println("How many guesses would you like? (5, 10, 20)"); 
      numberOfGuesses = scan.nextInt(); 
      numberOfGuesesIsValid = numberOfGuesses == 5 || numberOfGuesses == 10 || numberOfGuesses == 20; 

     if (!numberOfGuesesIsValid) { 
      System.out.print("Wrong option !!!"); 
     } 
     } while (!numberOfGuesesIsValid); 
    return numberOfGuesses; 
} 
0

你可以寫一個循環內的代碼,以確保值可以是5,10或20

while(numberOfGuesses!=5||numberOfGuesses!=10||numberOfGuesses=!20);

和條件if(answer.length()==3可能會導致錯誤。這意味着它將在每次輸入長度爲3時工作,即使是「noo」也是如此。