2017-05-12 16 views
1

フロートと整数をスキャンしたいと思います。スキャンされた数値が浮動小数点数または整数でない場合は、入力番号が正しくないときに再度スキャンして例外を追加します。私はhasNextFloathasNextIntで試しましたが、私は本当に正しいとは思えませんでした。Javaでスキャナ例外を処理する方法は?

package has_exception; 

import java.util.Scanner; 

public class Has_Exception { 

    public static void main(String[] args) { 

     Scanner scn = new Scanner(System.in); 

     System.out.println("Enter a float!"); 
     float fl = scn.nextFloat(); 

     System.out.println("Enter an integer"); 
     int a = scn.nextInt(); 

    } 
} 
+0

を**あなたは 'hasNextFloat'と' hasNextInt'を使用しましたか? – QBrute

+0

hasNextFloatを使用するときは覚えておいてください。入力は実際には読み取られません。したがって、入力の次のビットが浮動小数点かどうかを確認する必要があります。とにかく読んでフロートを得るまで繰り返してください。 –

答えて

1

...フロートの 初期値は、アプリケーションの依存し、あなたがこの方法を繰り返すことができフロートに文字列のパースを試してみて、ユーザーが有効な入力を与えるまで、この操作を行います整数値

Scanner scn = new Scanner(System.in); 
    float fl = -1.0f; 

    while (fl < 0) { 
     System.out.println("Enter a float!"); 

     String x = scn.nextLine(); 
     try { 
      fl = Float.parseFloat(x); 
     } catch (NumberFormatException e) { 
      System.out.println("Not a float"); 
     } 
    } 
+0

浮動小数点が正しいかどうかを調べるにはブール値でこれを行うべきです。それ以外の場合は、負の値を入力することはできません。もちろん、初期値はアプリケーションに依存していると言われていますが、フロートの種類を入力できるようにしたい場合もあります。 –

+0

これはfloatの初期値についてのコメントとは何ですか?flは正の場合のみ有効ですが、私の提案はOKです... OPは明らかにする必要があります.. –

1

は、次の例のように、代わりにnextLine()do{..}while()を使用することができます。

Scanner scn = new Scanner(System.in); 
boolean correct = true; 
do { 
    try { 

     System.out.println("Enter a float!"); 
     float fl = Float.parseFloat(scn.nextLine()); 
     System.out.println("Enter an integer"); 
     int a = Integer.parseInt(scn.nextLine()); 

    } catch (NumberFormatException e) { 
     correct = false; 
    } 
} while (!correct); 

scn.close();//close your scanner 
+1

ほとんど同じ考え:) uV! –