我怎么说以下内容:
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();
}
请提出任何建议。谢谢。
答案 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)
答案 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(...)?