簡體   English   中英

Java-字符串輸入異常處理

[英]Java - String Input Exception Handling

我是Java的新手,我被困住了。 我必須創建“猜數字”游戲。 我能夠完成大部分工作,但是現在我不知道如何處理用戶輸入(如果它是字符串)。 我希望能夠告訴用戶,如果他輸入字符串,則輸入不正確,並反復要求輸入。 如果有人可以在這里幫助我,那就太好了:)
這是我的代碼:

import java.util.Scanner;
import java.util.Random;

public class SWENGB_HW_2 {

public static void main(String[] args) {

    System.out.println("Welcome to the guess the number game!\n");
    System.out.println("Please specify the configuration of the game:\n");

    Scanner input = new Scanner(System.in);

    System.out.println("Range start number (inclusively):");
    int startRange;
    startRange = input.nextInt();

    System.out.println("Range end (inclusively):");
    int endRange;
    endRange = input.nextInt();

    System.out.println("Maximum number of attemps:");
    int maxAttemp;
    maxAttemp = input.nextInt();

    System.out.println("Your Task is to guess the random number between "
            + startRange + " and " + endRange);

    Random randGenerator = new Random();
    int randNumber = randGenerator.nextInt((endRange - startRange) + 1)
            + startRange;
    int numberOfTries = 0;

    System.out
            .println("You may exit the game by typing; exit - you may now start to guess:");
    String exit;
    exit = input.nextLine();


    for (numberOfTries = 0; numberOfTries <= maxAttemp - 1; numberOfTries++) {

        int guess;
        guess = input.nextInt();



        if (guess == randNumber) {
            System.out.println("Congratz - you have made it!!");
            System.out.println("Goodbye");
        } else if (guess > randNumber) {
            System.out.println("The number is smaller");
        } else if (guess < randNumber) {
            System.out.println("The number is higher");
        }

    }
    if (numberOfTries >= maxAttemp) {
        System.out.println("You reached the max Number of attempts :-/");
    }

}
}

您可以創建如下所示的實用程序方法:

public static int nextValidInt(Scanner s) {
    while (!s.hasNextInt())
        System.out.println(s.next() + " is not a valid number. Try again:");
    return s.nextInt();
}

然后,而不是

startRange = input.nextInt()

你做

startRange = nextValidInt(input);

如果您想使用"exit"替代方法,則建議使用以下方法:

public static int getInt(Scanner s) throws EOFException {
    while (true) {
        if (s.hasNextInt())
            return s.nextInt();
        String next = s.next();
        if (next.equals("exit"))
            throw new EOFException();
        System.out.println(next + " is not a valid number. Try again:");
    }
}

然后將整個程序包裝在

    try {
        ...
        ...
        ...
    } catch (EOFException e) {
        // User typed "exit"
        System.out.println("Bye!");
    }
} // End of main.

順便說一句,您其余的代碼看起來不錯。 我已經嘗試過了,它就像一個魅力:-)

您可以在嘗試讀取掃描儀之前先檢查它是否具有int 您可以通過調用hasNextInt()與類似的東西

while (input.hasNext() && !input.hasNextInt()) {
  System.out.printf("Please enter an int, %s is not an int%n", input.next());
}
int startRange = input.nextInt();

暫無
暫無

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

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