java nextInt()尝试多次捕获重复输出

时间:2012-08-23 09:02:37

标签: java exception-handling java.util.scanner

我正在编写一个程序,使用nextInt();在程序中接受两个整数,并将其包含在try catch块中以阻止诸如双打或字符之类的错误输入。

当输入多个错误输入时,循环重复相同的次数。我假设这是因为我的scan.next()必须循环足够的时间以捕获错误的输入错误。有没有办法在第一次运行时知道这个数字,以便多次循环运行下一个?

在输出中   if(cont == 'N') System.out.print("\nPlease re-enter\n\t:");将输出并反映输入不匹配输入的次数。也就是说,如果我输入3 3.3它将重复一个额外的时间,如果输入s 3.3 2.5它将重复三次额外的时间。

我尝试在scan.next()周围放置一个循环来默认它十次,但是太过分了,我必须在再次开始阅读之前输入额外的8个字符。可能是一个循环,但它的条件是什么,我试过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 个答案:

答案 0 :(得分:1)

不确定您希望代码执行什么操作。通过阅读您发布的内容,我假设您希望用户输入2个整数,如果他/她不是,则您希望提示他/她重新输入内容,直到他/她输入2个整数。 如果是这种情况,我只想添加

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

在此if语句之后:

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

这将解决您的循环问题

答案 1 :(得分:0)

首先尝试:

更改异常捕获中的行

scan.next();

while(scan.hasNext()){
    scan.next();
}

答案 2 :(得分:0)

您可以尝试在catch块中执行以下操作:

while(scan.hasNext())
    scan.next();

答案 3 :(得分:0)

使它成为一种方法,并使用该方法 ......这样:

        // 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;
    }