簡體   English   中英

Java中的隨機兩位數猜數字游戲

[英]Random two-digit number guessing game in Java

我正在為用戶設計一個“游戲”,以猜測一個隨機的兩位數,這是到目前為止的“健壯”版本:

import static java.lang.System.*;
import java.util.*;

public class RandomNumberGuessing {

public static Scanner scan = new Scanner(in);

public static void main(String args[]){
    Random generator = new Random ();
    int Low = 10;
    int High = 99;
    int answer = generator.nextInt (High - Low) + Low;
    int answerFirstDigit = Integer.parseInt(String.valueOf(answer).substring(0,1));
    int answerSecondDigit = Integer.parseInt(String.valueOf(answer).substring(1,2));
    int count = 0;
    out.println ("Welcome to the two digit number guessing game!");
    out.println ("We have randomly chosen a two-digit number");
    out.println ("And you have to guess it after 5 tries!");
    out.println ("Guess the number: ");
    while (!scan.hasNextInt ()) {
        scan.next ();
        out.println ("You have to input a valid two-digit integer!");
    }
    int guess = scan.nextInt ();
    while (guess != answer && count < 4){
        count ++;
        out.println("Wrong number! You have " + (5 - count) + " tries left:");
        if (Integer.parseInt(String.valueOf(guess).substring(0,1)) == answerFirstDigit){
            out.println("But you got the first digit correctly!");
        } else if (Integer.parseInt(String.valueOf(guess).substring(1,2)) == answerSecondDigit){
            out.println("But you got the second digit correctly!");
        } else if (Integer.parseInt(String.valueOf(guess).substring(1,2)) == answerSecondDigit || Integer.parseInt(String.valueOf(guess).substring(0,1)) == answerSecondDigit){
            out.println("One or two digits are correct but in the wrong place!");
        }
        while (!scan.hasNextInt ()) {
            scan.next ();
            out.println ("You have to input a valid two-digit integer!");
        }
        guess = scan.nextInt ();
    }
    if (guess == answer){
        out.println("Congratulations! The number was " + answer + "!");
    } else{
        out.println("The number was " + answer + ". Better luck next time!");
    }
}

}

但是我在強制用戶僅輸入兩位數字時遇到問題。 我嘗試使用:

while(guess < 10 || guess > 99){
   scan.next();
   out.println("Invalid number!");
   guess = scan.nextInt();
}

我添加了while循環之后,以確保用戶輸入了整數,並且當我在控制台中輸入3或4位數字(我在IntelliJ IDEA上運行代碼)時,它似乎掛起,沒有任何響應。 它甚至不會打印出“無效號碼!” 並掛起。 我是否必須使用方法來重寫代碼,或者可以向現有代碼添加其他任何內容,以確保用戶輸入了兩個數字整數? 提前致謝

為了檢查用戶是否僅輸入兩個數字,我將使用兩種方法進行驗證。 檢查事項:

  1. 用戶必須輸入內容,即不接受null或空
  2. 用戶輸入的所有內容必須正好兩個字符長
  3. 當字符為兩個時,它們必須全部為數字

在您的程序中,您可以執行以下操作
1.以字符串形式獲取輸入
2.調用validString
3.如果有效,則轉換為整數
4.檢查數字是否在范圍之間(如果用戶輸入01,則結果為true)。 Integer.ParseInt可以捕獲此錯誤,但無論如何都可以檢查

完整的程序應該是這樣的

import static java.lang.System.*;
import java.util.*;

public class RandomNumberGuessing {

public static Scanner scan = new Scanner(in);

public static void main(String args[]) {
    final int tries = 5; // max number of tries
    Random generator = new Random();
    int Low = 10;
    int High = 99;
    int answer = generator.nextInt(High - Low) + Low;

    int firstDigit = getFirst(answer);
    int secondDigit = getSecond(answer);

    out.println("Welcome to the two digit number guessing game!");
    out.println("We have randomly chosen a two-digit number");
    out.println("And you have to guess it after " + tries + " tries!");

    int guess = 0; // number guessed
    int count = 0; // number of failed guesses

    do {
        out.println("Guess the number: ");

        String guessString = scan.nextLine(); // just read everything
                                              // entered

        if (validString(guessString)) {
            guess = Integer.parseInt(guessString);
            if (guess >= Low && guess <= High) { // check range and only
                                                 // process valid range
                count++;
                if (count == tries) {
                    out.print("Max guess reached.\nThe values were ");
                    out.println(firstDigit + " and " + secondDigit);
                    break;
                }
                out.println("You guessed " + guess);

                // get the first and second digits
                int first = getFirst(guess);
                int second = getSecond(guess);

                // compare them and process
                if (guess == answer) {
                    out.println("Congratulations. You made the right guess after "
                                    + count + " tries");
                } else if (first == firstDigit) {
                    out.println("Guessed the first number rightly");

                } else if (second == secondDigit) {
                    out.println("Guessed the second number rightly");
                } else {
                    out.print("No matching guess. You have ");
                    out.println((tries - count) + " guesses left");
                }
            } else {
                out.println("Out of range!");
            }

        } else {
            out.println("Bad Value.");

        }

    } while (guess != answer && count < tries);

}

// Validate an input Checks for length [2 characters] and that everything is
// a digit
private static boolean validString(final String guess) {
    if (guess != null && !guess.isEmpty()) { // if not null and not empty

        if (guess.length() == 2 && isAllDigits(guess)) { // length and digit
            return true;
        } else {
            return false;
        }
    } else {
        return false;
    }
}

// Verify that all characters in a string are numbers
private static boolean isAllDigits(final String input) {
    for (char c : input.toCharArray()) {
        if (!Character.isDigit(c))
            return false;
    }
    return true;
}

// get the first digit
private static int getFirst(final int value) {
    return Integer.parseInt(String.valueOf(value).substring(0, 1));
  }

// Get the second digit
private static int getSecond(final int value) {
    return Integer.parseInt(String.valueOf(value).substring(0, 1));
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM