1

NumberFormatException をより具体的な方法で処理したい。この例外は、次のように入力されたときに整数以外を代入しようとすると発生します。

  1. ストリング
  2. キャラクター
  3. 空の入力
  4. 倍数

入力した内容に応じて、次のような適切なメッセージを表示したい

文字列を入力しました。整数を入力してください

また

値を null にすることはできません。整数値を入力してください

以下のコードは、一般的な方法でキャッチNumberFormatExceptionします。

もっと多くの catch 句を含める方法があるのだろうか。

    import java.util.Scanner;

    public class TestException {

        static int input;
        static Scanner scan = new Scanner(System.in);

        public static void main(String[] args) {
            System.out.println("Enter an integer number: ");

            try {
                input = Integer.parseInt(scan.next());
                System.out.println("You've entered number: " + input);
            } catch (NumberFormatException e) {
                System.out.println("You've entered non-integer number");
                System.out.println("This caused " + e);
            }
        }
    }
4

5 に答える 5

5

最初にユーザーからの入力を取得し、その後、それを整数に変換しようとします。

    static int input;
    static Scanner scan = new Scanner(System.in);

    public static void main(String[] args) {
        System.out.println("Enter an integer number: ");

        String inputString = scan.next();

        try {
            input = Integer.parseInt();
            System.out.println("You've entered number: " + input);
        } catch (NumberFormatException e) {
            if(inputString.equals("") || inputString == null) {
                System.out.println("empty input"); 
            } else if(inputString.length == 1) {
                System.out.println("char input");
            } else {
                System.out.println("string input");
            }
        }
    }
于 2013-01-10T07:07:10.020 に答える
2

ブロックif-else内でシーンを指定するには、コンストラクトを使用する必要があります。catch

以下のコードを参照してください。

String inString = null;
try 
{
    iString = scan.next().trim();
    input = Integer.parseInt(inString);
    System.out.println("You've entered number: " + input);
} 
catch (NumberFormatException e) 
{
    if(inString.equals("")
    {
        System.out.println("You've entered empty string.");
    }
    else if(inString.length() == 1)
    {
        System.out.println("You've entered a single char");
    }
    else
    {
        System.out.println("You've entered non-intereger number");
    }
    System.out.println("This caused " + e);
}
于 2013-01-10T07:06:58.023 に答える
1

入力を整数値として解析すると例外が発生した場合は、次のように、入力に対してさらにいくつかのテストを実行できます。

String scanned = null
try {
   scanned = scan.next();
   input = Integer.parseInt(scanned);
   System.out.println("You've entered number: " + input);
} catch (NumberFormatException e) {
   if (scanned == null || scanned.isEmpty()) {
      System.out.println("You didn't enter any value");
   } else if (scanned.length() == 1)
      System.out.println("You entered a single char which is not a number");
   }
   // and more tests, you can even try to parse as Double
}
于 2013-01-10T07:08:10.360 に答える
0
String aString = null;
    aString = scan.next().trim();   
    System.out.println("You've entered number: " + aString);
    if("".equals(aString.trim())){
       System.out.println("You have entered an Empty String");
     }else if(!isNumber(aString) && aString.length()==1){
       System.out.println("You have entered a Character");
     }else if(!isNumber(aString) && aString.length()>1){
       System.out.println("You have entered a String");
     }else if(isNumber(aString)){
       int input = Integer.parseInt(aString.replaceAll(",",""));
       System.out.println("You have entered a correct Number"+input); 
     }

   private boolean isNumber(String s){
        return s.matches("[0-9]+(,[0-9]+)*,?");
    }
于 2013-01-10T07:18:29.547 に答える