2012-01-01 8 views
0

私はユーザからの数字だけを受け付ける方法を理解しようとしていますが、try catchブロックを使用して試行しましたが、それでもエラーが発生します。Javaはスキャナからユーザの番号のみを受け取ります

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) 

答えて

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"); 
     } 
+0

ありがとう!私はnextLine()とparseInt()を使うことを覚えています。 – Streak324

2

むしろNumberFormatExceptionInputMismatchException)よりもスローされた例外の種類をキャッチしてみます。

2

メッセージはかなり明確です。Scanner.nextInt()InputMismatchExceptionをスローしますが、コードはNumberFormatExceptionです。適切な例外タイプをキャッチします。

+0

申し訳ありませんでした。 – Streak324

関連する問題