如何循环直到用户输入有效整数?

时间:2018-02-05 11:02:23

标签: java int java.util.scanner

我是java的新手,我正在尝试验证输入控制台的数字。我想要一个整数,但我知道如果输入一个字母,例如会出现错误,所以我想我会使用try&抓住。如果尝试并且第一次执行它,这是有效的,但我想循环直到用户输入有效整数。有这个工作,但当我得到一个有效的数字并打印出数字我得到所有尝试的清单....希望这是有道理的

import java.util.Scanner;
public class ConvertStringInt {

    public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int i = 0;
    System.out.print("Enter a whole number: ");
    try {
      i = sc.nextInt();
    } catch (Exception e){
      System.out.println("Error");
      main(args);
    }

    System.out.println(i);

  }
}

以下是控制台的输出....

  

输入一个整数:a

     

错误

     

输入整数:d

     

错误

     

输入整数:2.0

     

错误输入整数:1

     

1

     

0

     

0

     

0

有人可以解释一下吗?

提前致谢

尼尔

2 个答案:

答案 0 :(得分:2)

您正在查看每个输入的输出,因为您以递归方式调用b。如果您立即键入正确的IO,则流程为:

main

但在您的情况下,输入不是int。这就是:你输入第一个输入,它失败了。您打印,因为您先再次呼叫main ask for input -> int print i (1) ,要求下一个输入。只有当你得到一个正确的int打印,然后完成并允许先前的main - 执行才能通过打印完成,然后允许先前的......等等:

int

请查看Ravi的答案,以便在不使用mainwhich is discouraged)的情况下反复询问输入的正确方法。

答案 1 :(得分:1)

您可以在循环中检查整数标记

while (!sc.hasNextInt()) // loop until next token is integer
{
    // do something or print error
     System.out.println(sc.next() +"is not number");
}

i = sc.nextInt();