Java принимает только номера от пользователя со сканером - PullRequest
0 голосов
/ 02 января 2012

Я пытаюсь понять, как принимать только числа от пользователя, и я пытался сделать это, используя блоки try catch, но я все равно получал бы ошибки с ним.

    Scanner scan = new Scanner(System.in);

    boolean bidding;
    int startbid;
    int bid;

    bidding = true;

    System.out.println("Alright folks, who wants this unit?" +
            "\nHow much. How much. How much money where?" );

    startbid = scan.nextInt();

try{
    while(bidding){
    System.out.println("$" + startbid + "! Whose going to bid higher?");
    startbid =+ scan.nextInt();
    }
}catch(NumberFormatException nfe){

        System.out.println("Please enter a bid");

    }

Я пытаюсьчтобы понять, почему он не работает.

Я проверил его, введя в консоль a, и вместо обнадеживающего разрешения "Пожалуйста, введите ставку" я получил бы ошибку.

Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:909)
at java.util.Scanner.next(Scanner.java:1530)
at java.util.Scanner.nextInt(Scanner.java:2160)
at java.util.Scanner.nextInt(Scanner.java:2119)
at Auction.test.main(test.java:25)

Ответы [ 3 ]

2 голосов
/ 02 января 2012

Сообщение довольно ясно: Scanner.nextInt() выдает InputMismatchException, но ваш код перехватывает NumberFormatException. Поймать соответствующий тип исключения.

2 голосов
/ 02 января 2012

Попробуйте отловить тип создаваемого исключения, а не NumberFormatException (InputMismatchException).

1 голос
/ 02 января 2012

При использовании Scanner.nextInt() это вызывает некоторые проблемы.Когда вы используете Scanner.nextInt(), он не использует новую строку (или другой разделитель), поэтому следующий возвращаемый токен обычно будет пустой строкой.Таким образом, вам нужно следовать за ним с Scanner.nextLine().Вы можете отменить результат.

По этой причине я предлагаю всегда , используя nextLine (или BufferedReader.readLine()) и выполняя синтаксический анализ после использования Integer.parseInt().Ваш код должен быть следующим.

        Scanner scan = new Scanner(System.in);

        boolean bidding;
        int startbid;
        int bid;

        bidding = true;

        System.out.print("Alright folks, who wants this unit?" +
                "\nHow much. How much. How much money where?" );
        try
        {
            startbid = Integer.parseInt(scan.nextLine());

            while(bidding)
            {
                System.out.println("$" + startbid + "! Whose going to bid higher?");
                startbid =+ Integer.parseInt(scan.nextLine());
            }
        }
        catch(NumberFormatException nfe)
        {
            System.out.println("Please enter a bid");
        }
...