public class test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = "";
while(true){
System.out.println("请输入一个数");
if (scanner.hasNextInt()){
s = scanner.next();
System.out.println("是整数");
break;
}else {
System.out.println("不是整数");
}
}
}
}
这是输入非整形的字符就会陷入死循环的代码(导包没有粘贴)
这个代码乍一看逻辑没有问题
问题就出在在hasNextInt()这个方法上面,hasNextInt()方法会接收你在控制台输入的字符。所以,第二次、第三次、第n次循环hasNextInt()这个方法接收的都是你第一次输入的字符,所以只要第一次输错,就会直接死循环。当然,有解决办法,如下代码
public class test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = "";
while(true){
System.out.println("请输入一个数");
if (scanner.hasNextInt()){
s = scanner.next();
System.out.println("是整数");
break;
}else {
System.out.println("不是整数");
System.out.println("——————————————————————————————————————");
System.out.println("请重新输入");
s = scanner.next();
}
}
}
}
这里在else代码块里,添加了一个s = scanner.next() , 目的是为了刷新从控制台输入的字符,如此一来,死循环就解决了