2

ユーザーが入力できる内容を次のように制限することで、ユーザー入力がプログラムをクラッシュさせないようにしています。

  1. int のみである
  2. 1 ~ 30 の間

私が書いたコードは、ある時点までしか機能しません。int 以外のものを入力すると、それがチェックされ、再度入力するよう求められます。次に、int 以外を入力し続けると、. int を入力する場合は別の while ループがあり、1-30 ゾーンの外にある場合は、ユーザーに再度入力するように求めます。ただし、その後、ユーザーが別の「int 以外」を入力すると、プログラムがクラッシュします。sc.hasnextint()と 1 から30 の間の入力のチェックの両方を組み合わせようとしましたが、 を のsc.nextint()前に置きsc.hasnextint()、ユーザーが int 以外のものを入力すると、プログラムがクラッシュします。条件ループの後に配置すると、ユーザー入力は宣言されません。

int choose;
System.out.print("type an integer: ");
Scanner sc=new Scanner(System.in);

while (!sc.hasNextInt() ) { 
    System.out.println("only integers!: "); 
    sc.next(); // discard 
} 

choose=sc.nextInt();

while (choose<=0 || choose>30)
{
    System.out.print("no, 1-30: ");
    choose=sc.nextInt();
}
sc.close();
4

4 に答える 4

4

エンドユーザーが新しい何かを入力するたびに両方のチェックが行われるように、2 つのループを組み合わせる必要があります。

for(;;) {
    if(!sc.hasNextInt() ) { 
        System.out.println("only integers!: "); 
        sc.next(); // discard
        continue;
    } 
    choose=sc.nextInt();
    if( choose<=0 || choose>30)
    {
        System.out.print("no, 1-30: ");
        continue;
    }
    break;
}

ループ終了後、は ~ の間のchoose数値です。130

于 2012-09-19T02:29:51.603 に答える
0
    String choose = "";
    System.out.println("Test if input is an integer. Type 'quit' to exit.");
    System.out.print("Type an integer: ");
    Scanner sc=new Scanner(System.in);

    choose = sc.nextLine();

    while (!(choose.equalsIgnoreCase("quit"))) {
        int d = 0;
        try {
            d = Integer.parseInt(choose);

            if (!(d > 0 && d < 31)) {
                System.out.println("Being between 1-30");
            } else {
                System.out.println("Input is an integer.");
            }
        } catch (NumberFormatException nfe) {
            System.out.println("Enter only int");
        }

        System.out.print("Type an integer to test again or 'quit' to exit: ");
        sc = new Scanner(System.in);
        choose = sc.nextLine();
    }

    sc.close();
    System.out.print("Program ends.");
于 2012-09-19T03:32:00.010 に答える
0
do:
get number from user
if non integer format is entered{
number = -1;}
while: 1 < number < 30
于 2012-09-19T02:33:30.240 に答える