如果输入非数字值,如何阻止程序崩溃?我知道kbd.hasNextLong,但我不确定如何实现它。
答案 0 :(得分:1)
这是验证它的方法:
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
boolean end = false;
long value;
while (end == false) {
try {
value = input.nextLong();
end = true;
} catch (InputMismatchException e) {
System.out.println("Please input the right LONG value!");
input.nextLine();
}
}
}
请注意catch-statement中的input.nextLine()
。如果你输入一些非int文本,它会跳转到catch(导致Integer无法在nextInt中读取),它会打印出来,然后再次进入。但键入的值并不会消失,所以即使你什么都不做,它也会再次崩溃。
input.nextLine()
“刷新”你放入的内容。
使用hasNextLong是另一种方式(但我更喜欢抛出异常,因为它是一个例外):
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
boolean end = false;
long value;
while (end == false) {
if (input.hasNextLong()) {
value = input.nextLong();
end = true;
} else {
System.out.println("input the LONG value!");
input.nextLine();
}
}
}
答案 1 :(得分:-1)
一个简单的解决方案是使用例外。
int value;
do {
System.out.print("Type a number: ");
try {
value = kbd.nextInt();
break;
}
catch(InputMismatchException e) {
System.out.println("Wrong kind of input!");
kbd.nextLine();
}
}
while(true);