虽然没有条件

时间:2012-02-09 00:47:30

标签: java loops while-loop int

我怎么说以下内容:

while(input is not an int){
do this
}

我试过这段代码,但我知道这是错的:

 int identificationnumber;
 Scanner sc3 = new Scanner(System.in);
identificationnumber = sc3.nextInt();

while( identificationnumber != int){ // this line is wrong 

Scanner sc4 = new Scanner(System.in);
identificationnumber = sc4.nextInt();

}

请提出任何建议。谢谢。

7 个答案:

答案 0 :(得分:6)

Javadocs是你的朋友:http://docs.oracle.com/javase/6/docs/api/java/util/Scanner.html

如果下一个标记不是nextInt()

int会抛出异常。您可能正在寻找hasNextInt()

另外,为什么每次循环时都要创建一个新的Scanner? (或者根本就是 - 你已经有一个在循环之前)

答案 1 :(得分:6)

尝试:

while (! scanner.hasNextInt()) { // while the next token is not an int...
    scanner.next();              // just skip it
}
int i = scanner.nextInt();       // then read the int

答案 2 :(得分:1)

扫描程序在到达该行之前抛出异常 http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html#nextInt()

以下代码可以使用:

    int i = 0;
    while(true){
        Scanner scan = new Scanner(System.in);
        try{
            i = scan.nextInt();
        }catch (Exception e) {
            break;
        }
    }

答案 3 :(得分:1)

你想要这个吗?

String identificationnumber;
Scanner scanner = new Scanner(System.in);//Only one Scanner is needed

while (scanner.hasNext()) { // Is there has next input?
    identificationnumber = scanner.next();//Get next input
    try {
        Integer.parseInt(identificationnumber);//Try to parse to integer
        System.out.println(identificationnumber + " is a number!");
    } catch (NumberFormatException e) {
        System.out.println(identificationnumber + " is not a number!");
    }
}

答案 4 :(得分:0)

通过编写sc3.nextInt()我假设你总是得到一个int,所以检查一个非int似乎有点奇怪。

也许最好返回一个带有数字的字符串。如果字符串为空停止(您只需检查“”),否则将其转换为整数。

答案 5 :(得分:0)

使用扫描仪类的nextInt()方法。

它抛出,

  

InputMismatchException - 如果下一个标记与   整数正则表达式,或超出范围

答案 6 :(得分:0)

你应该这样做:

if (sc3.hasNextInt())

检查出来:How to use Scanner to accept only valid int as input

关于课程/类型比较,请阅读:What is the difference between instanceof and Class.isAssignableFrom(...)?