0

私は、を使用してプログラム内で2つのintを受け入れ、doubleやcharなどの不正な入力を停止するためにブロックnextInt();でラップするプログラムを作成しています。try catch

複数の間違った入力が入力されると、ループは同じ回数繰り返されます。これは、scan.next()エラーのない不正な入力をキャッチするのに十分な回数ループする必要があるためだと思います。最初の実行時にこの数を知って、次に実行するループを何度も作成する方法はありますか?

出力では if(cont == 'N') System.out.print("\nPlease re-enter\n\t:");、不一致の入力が書き込まれた回数が出力され、ミラーリングされます。つまり、3 3.3を入力すると、1回余分に繰り返され、3.3 2.5を入力すると、3回余分に繰り返されます。

ループscan.next()を設定してデフォルトで10回にしようとしましたが、やりすぎで、読み始める前にさらに8文字を入力する必要がありました。たぶんwhileループですが、その状態はどうなるのでしょうか。試してみwhile(scan.next() != null){}ましたが、その状態は止まりませんでした。

//input error checking
char cont = 'Y';
do{
  if(cont == 'N')
    System.out.print("\nPlease re-enter\n\t:");
  cont = 'Y';
  /* to stop the accidential typing of things other
   * than integers from being accepted
   */
  try{
    n1 = scan.nextInt();
    n2 = scan.nextInt();
  }catch(Exception e){
    cont = 'N'; //bad input repeat loop
    scan.next();//stops infinite loop by requesting Scanner try again
  }
} while(cont == 'N');//do loop while told N for continue
4

4 に答える 4

1

コードに何をさせたいかわからない。あなたが投稿したものを読んだことから、ユーザーに2 intを入力してもらいたいと思います。そうでない場合は、2intを入力するまで何かを再入力するように促したいと思います。この場合、私はただ追加します

scan = new Scanner(br.readLine());

この後のifステートメント:

if(cont == 'N') {System.out.print("\nPlease re-enter\n\t:");}

これにより、ループの問題が解決します

于 2012-08-23T13:22:41.413 に答える
0

初挑戦 :

例外キャッチの行をから変更します

scan.next();

while(scan.hasNext()){
    scan.next();
}
于 2012-08-23T09:21:10.510 に答える
0

キャッチブロックで次のことを試すことができます。

while(scan.hasNext())
    scan.next();
于 2012-08-23T09:21:35.063 に答える
0

それをメソッドにして、そのメソッドで実行します。
このようなsth:

        // do it until getting two Integers
    boolean isItInteger = false;
    while (isItInteger == false) {
        isItInteger = getInt();
    }
    .
    .
    .
        // your method for getting two Integers
    public static boolean getInt() {
        try {
            Scanner sc = new Scanner(System.in);
            n1 = sc.nextInt();
            n2 = sc.nextInt();
        } catch (Exception e) {
            System.out.println("Please re-enter");
            return false;
        }
        return true;
    }
于 2012-08-23T09:23:09.997 に答える