3

Java で遊んでいるだけです。プログラムに 3 桁の数字のみを受け入れるように強制しようとしています。while ループを使用してこれを正常に実行できたと思います (間違っている場合は修正してください)。しかし、ユーザーが文字列を入力した場合にエラー ステートメントを出力するにはどうすればよいでしょうか。例: 「abc」。

私のコード:

    import java.util.Scanner;
    public class DigitSum {

    public static void main(String[] args) {

    Scanner newScan = new Scanner(System.in);

        System.out.println("Enter a 3 digit number: ");
        int digit = newScan.nextInt();

        while(digit > 1000 || digit < 100)
            {           
             System.out.println("Error! Please enter a 3 digit number: ");
             digit = newScan.nextInt();
            }

        System.out.println(digit);
       }
    }
4

7 に答える 7

3

これはどう?

public class Sample {
    public static void main (String[] args) {
        Scanner newScan = new Scanner (System.in);

        System.out.println ("Enter a 3 digit number: ");
        String line = newScan.nextLine ();
        int digit;
        while (true) {
            if (line.length () == 3) {
                try {
                    digit = Integer.parseInt (line);
                    break;
                }
                catch (NumberFormatException e) {
                    // do nothing.
                }
            }

            System.out.println ("Error!(" + line + ") Please enter a 3 digit number: ");
            line = newScan.nextLine ();
        }

        System.out.println (digit);
    }
}

正規表現のバージョン:

public class Sample {
    public static void main (String[] args) {
        Scanner newScan = new Scanner (System.in);

        System.out.println ("Enter a 3 digit number: ");
        String line = newScan.nextLine ();
        int digit;

        while (true) {
            if (Pattern.matches ("\\d{3}+", line)) {
                digit = Integer.parseInt (line);
                break;
            }

            System.out.println ("Error!(" + line + ") Please enter a 3 digit number: ");
            line = newScan.nextLine ();
        }

        System.out.println (digit);
    }
}
于 2012-10-11T11:49:21.097 に答える
2

ここで、メソッド自体が、入力が間違っている場合にnextIntスローします。InputMismatchException

try {
  digit = newScan.nextInt() 
} catch (InputMismatchException e) {
  e.printStackTrace();
  System.err.println("Entered value is not an integer");
}

これで十分です。

于 2012-10-11T11:39:22.590 に答える
2

try catch ブロックで int を読み取るためのコードを埋め込みます。間違った入力が入力されるたびに例外が生成され、catch ブロックに必要なメッセージが表示されます

于 2012-10-11T11:26:59.887 に答える
1

私がそれを行う方法は、ifステートメントを使用することです。if ステートメントは次のようになります。

if(input.hasNextInt()){
    // code that you want executed if the input is an integer goes in here    
} else {
   System.out.println ("Error message goes here. Here you can tell them that you want them to enter an integer and not a string.");
}

注: 整数ではなく文字列を入力する場合は、if ステートメントの条件をinput.hasNextLine()ではなくに変更しますinput.hasNextInt()

2 番目の注意:inputは、私がスキャナーと名付けたものです。パンケーキに名前を付ける場合はpancakes.hasNextInt()、 orと入力する必要がありますpancakes.hasNextLine()

私が助けてくれたことを願っています。

于 2013-09-05T03:09:55.443 に答える
0

次の方法で、文字列が数値であるかどうかを確認できます。

1) try/catch ブロックの使用

try  
{  
  double d = Double.parseDouble(str);  
}catch(NumberFormatException nfe)  {
  System.out.println("error");
}  

2) 正規表現の使用

if (!str.matches("-?\\d+(\\.\\d+)?")){
  System.out.println("error");
}

3) NumberFormat クラスの使用

NumberFormat formatter = NumberFormat.getInstance();
ParsePosition pos = new ParsePosition(0);
formatter.parse(str, pos);
if(str.length() != pos.getIndex()){
  System.out.println("error");
}

4) Char.isDigit() の使用

for (char c : str.toCharArray())
{
    if (!Character.isDigit(c)){
      System.out.println("error");
    }
}

詳細については、Java で文字列が数値かどうかを確認する方法を参照してください。

于 2012-10-11T11:34:12.723 に答える
0

When you grab the input or pull the input string run through parseInt. This will in fact throw an exception if yourString is not an Integer:

Integer.parseInt(yourString)

And if it throws an exception you know its not a valid input so at this point you can display an error message. Here are the docs on parseInt:

http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Integer.html#parseInt(java.lang.String)

于 2012-10-11T11:23:44.197 に答える