Java仅接受来自使用Scanner的用户的号码

时间:2012-01-01 22:46:14

标签: java input try-catch java.util.scanner integer

我试图理解如何仅接受来自用户的数字,并且我尝试使用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)

3 个答案:

答案 0 :(得分:2)

尝试捕获抛出的异常类型,而不是NumberFormatExceptionInputMismatchException)。

答案 1 :(得分:2)

消息非常明确:Scanner.nextInt()会引发InputMismatchException,但您的代码会捕获NumberFormatException。捕获适当的异常类型。

答案 2 :(得分:1)

使用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");
        }