Java принимает только числа от пользователя со сканером

Я пытаюсь понять, как принимать числа только от пользователя, и я пытался сделать это с помощью блоков 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");

    }

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

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

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)

person Streak324    schedule 01.01.2012    source источник


Ответы (3)


При использовании 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");
        }
person Lion    schedule 01.01.2012
comment
Благодарю вас! Я не забуду использовать nextLine() и parseInt() - person Streak324; 02.01.2012

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

person Cameron S    schedule 01.01.2012

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

person JB Nizet    schedule 01.01.2012