2014-10-08 108 views
0

我需要一個方法添加到我的猜謎遊戲,我做了一個前一陣子。該方法應返回它們輸入的值,但應使用循環來要求重新輸入,直到指定了這兩個值中的一個值。 另外,如果用戶輸入一個單詞而不是一個整數,它應該要求一個數字。我知道我需要使用字符串而不是int。我只是無法弄清楚這一點。以下是我迄今爲止:猜謎遊戲添加一個方法

import java.util.Random; 

import java.util.Scanner; 

class GuessNumber { 

    static Random rand = new Random(); 
    static Scanner scan = new Scanner(System.in); 
    static int number; 

    public static void main(String[] args) { 
     playGame(); 
    } 

    public static void playGame() { 
     number = rand.nextInt(100) + 1; 
     System.out.println("Guess the number between 1 and 100"); 
     while (true) { 
      int guess = scan.nextInt(); 
      if (guess < number) { 
       System.out.println("Higher!"); 
      } else if (guess > number) { 
       System.out.println("Lower!"); 
      } else if (guess == number) { 
       System.out.println("Correct!"); 
       Scanner scan2 = new Scanner(System.in); 
       System.out.println("do you wanna play again?[Y/N]"); 
       String val = scan2.next(); 
       if (val.equalsIgnoreCase("Y")) { 
        playGame(); 
       } else { 
        break; 
       } 
      } 
     } 
    } 
} 
+0

...而且?這裏有問題嗎? – Qix 2014-10-08 01:03:46

+4

@Qix這顯然是猜謎遊戲是自我的一部分...... – MadProgrammer 2014-10-08 01:06:00

+0

如果你知道你將不得不使用一個字符串,而不是一個int的,開始通過重寫代碼來反映你(正確地)認識你」重新需要。然後使用您的Internet Search Fu來了解String的parseInt()方法。請花點時間閱讀您發現的內容,並考慮如何使用parseInt()將字符串輸入轉換爲您可以比較的數字。或者,查看String的compare()方法,查看一個字符串是按字典順序更高,更低還是與另一個字符串相同。 – MarsAtomic 2014-10-08 01:25:08

回答

2

有可能是一個更好的辦法來做到這一點,但嘗試沿着線的東西:

String input = scan.next(); 
int guess; 
try{ 
    guess = Integer.parseInt(input); 
    //rest of the code inside while(true) loop 
} 
catch(Exception e){ 
    System.out.println("You need to enter a valid number."); 
} 

,然後爲Y/N驗證:

String val = "No"; 
Scanner scan2 = new Scanner(System.in); 
do{ 
    System.out.println("do you wanna play again?[Y/N]"); 
    val = scan2.next(); 
} 
while(!val.equalsIgnoreCase("Y") && !val.equalsIgnoreCase("N")) 
if (val.equalsIgnoreCase("Y")) { 
    playGame(); 
    break; 
} else { 
    break; 
} 

推理:如果他們沒有輸入有效的數字,你會得到一個錯誤,所以你需要捕捉錯誤並讓他們知道什麼是錯的。我喜歡以字符串的形式獲取輸入,並嘗試將其轉換爲整數。至於do/while部分...除非他們輸入Y或N,否則他們會一直問他們。一旦退出循環,如果輸入爲「Y」,它將再次調用playGame(),然後在完成後中斷(基本上每當用戶在下一個遊戲中鍵入n時)。如果不是「是」,那麼它必須是「N」並且需要中斷。

讓我知道這是否有幫助。我有完整的代碼可以工作,但這應該很容易實現。

+0

感謝您的幫助! – user4068770 2014-10-08 01:57:41

1

當你聲明你的靜態變量,提出:

static int number, guess; 

要在同一時間宣佈兩個號碼。然後,在主循環中,執行以下操作:

while (true) { 
    while (true) { 
     try { 
      guess = Integer.parseInt(scan.nextLine()); 
      break; 
     } catch (Exception e) { 
      System.out.println("Not a valid number!"); 
      continue; 
     } 
    } 
    //Rest of your if's, else if's, etc 
} 

我測試過了,它適用於我。

如果你需要我,我可以在所有的代碼粘貼,但你應該能夠公正窩那第二while循環中的第一個,之前的if語句,很輕鬆了。

+0

感謝您的幫助,我得到它的工作! – user4068770 2014-10-08 01:57:25