我有这个方法,我想检查用户输入。如果它是一个数字但是大于9且lees比1或Char / String我想抛出异常。使用它可以使用的数字,但是当我想检查char / Strings时,它会进入无限循环。
private static Scanner in = new Scanner(System.in);
public static int getPlayerPositionInput(String message) {
System.out.println(message);
while(true) {
System.out.println("1");
try {
if(in.hasNextInt()){
int i = in.nextInt();
if(i<1 || i>9 ) throw new IOException();
return i;
} else throw new IOException();
} catch(Exception e) {
System.out.println("The number has to be greater than 0 and less than 10");
}
}
}
我在考虑使用ASCII表,这是个好主意吗?
答案 0 :(得分:2)
如果您输入String
,则if(in.hasNextInt()){
将始终为false,因此无法输入。
尝试使用hasNext
和nextLine
答案 1 :(得分:1)
问题是,在您提交非数字字符串后,hasNextInt()
会返回false
。但是scince你不会丢弃错误的输入,它会在下次调用时返回false
。
试试这个:
while (true) {
System.out.println("1");
try {
if (in.hasNext()) {
if (in.hasNextInt()) {
int i = in.nextInt();
if (i < 1 || i > 9) {
throw new IOException();
}
return;
} else {
in.next(); // discard the input
throw new IOException();
}
}
} catch (IOException e) {
System.out.println("The number has to be greater than 0 and less than 10");
}
}
答案 2 :(得分:0)
因为你正在捕捉异常并进入下一个循环。
异常是IOException的超类。请阅读以下文档。
http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html
您的异常捕获逻辑需要重构。