用户输入一个整数,如果不是整数就提示他反复输入,直到正确;
但当我输入错误时,一直循环,没有等我输入;
public class Test01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int input = 0;
while(true){
try {
System.out.println("输入一个整数");
input = scanner.nextInt();
break;
} catch (Exception e) {
System.out.println("你输入的不是一个整数");
}
}
}
}
运行结果就是:
输入一个整数
1.1
你输入的不是一个整数
输入一个整数
一直循环
我试着把
Scanner scanner = new Scanner(System.in);
input = scanner.nextInt();
改成
input = new Scanner(system.in).nextInt();
就可以了;
但不明白为什么,求大家解惑
希望能解释细致一点,初学者正在学习
有用记得采纳,谢谢。代码中的问题是:当使用了Scanner的nextInt方法时,如果用户输入的不是整数,会抛出一个异常,但此时Scanner的缓存仍然保留着错误的输入数据。因此,在下一次调用Scanner的nextInt方法时,它将仍然返回错误的输入数据,导致代码一直在循环中。
解决方案是:使用Scanner的nextLine方法将错误的输入数据从缓存中清除,再次读取一个整数
public class Test01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int input = 0;
while(true){
try {
System.out.println("输入一个整数");
input = scanner.nextInt();
break;
} catch (Exception e) {
System.out.println("你输入的不是一个整数");
scanner.nextLine();
}
}
}
}
在while语句块外面初始化new Scanner,则while循环体里面只能使用1次,只会等待用户1次输入动作
把new Scanner放到while循环体里面,则可以反复等待用户输入
Scanner类的create方法被定义为了接受一个InputStream参数,而你在这里没有,使用一个新的Scanner对象代替即可,并且你需要将这个参数传递给Scanner对象才能正常使用。 比如,如果我们想要从System.in中读取一个数字,可以这样做: Scanner scanner = new Scanner(System.in); int input = scanner.nextInt();
这样的话,scanner就会从System.in中读取这个数字,然后返回给变量input。 因此,如果你想要从System.in中获取输入的数字,一定要创建一个新的Scanner对象,并且将System.in参数传递给这个对象。
该回答引用ChatGPT
该代码的逻辑是:使用 Scanner 类的 hasNextInt 方法判断是否为整数,如果不是整数就使用 next 方法读取该数据并重新输入,直到输入为整数为止。
实现代码如下,
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入一个整数:");
while (!input.hasNextInt()) {
input.next();
System.out.print("输入不是整数,请重新输入:");
}
int number = input.nextInt();
System.out.println("您输入的整数是:" + number);
}
}