因此,我正在编写一些方法,要求用户输入所需的时间(1-24)。但是,我需要检查它们是否输入int,以及1-24之间的数字。问题是,如果将扫描程序发送到错误语句,则会被多次调用。没有这些问题,我不知道该怎么做。
public static int getHour(Scanner scan){
int hour=0;
System.out.println("Enter the hour for the showtime (1-24):");
do{
if((!scan.hasNextInt())||((hour=scan.nextInt())<1)||(hour>24)){
System.out.println("Enter a valid number");
scan.next();
} else{
return hour;
}
}while((!scan.hasNextInt())||(hour<1)||(hour>24));
return hour;
}
理想情况下,当输入无效输入(例如1-24之外的字符串或整数)时,它仅提示一次。但它会提示两次或有时提示一次,具体取决于您输入的错误输入的顺序。
任何帮助将不胜感激,谢谢
答案 0 :(得分:1)
您遇到此问题是因为.hasNextInt()
不会超过输入,并且.nextInt()
仅在翻译成功的情况下才会前进。因此,循环和if语句的组合可能会导致扫描仪是否前进的混乱。这是您的方法被重写为对于每个错误的输入仅使扫描程序提示一次:
public int getHour(Scanner scan) {
System.out.printf("%nEnter the hour for the showtime (1-24): ");
while (true) {
input = scan.next();
entry = -1;
try {
entry = (int)Double.parseDouble(input);
} catch (NumberFormatException e) {
// Ensures error is printed for all bad inputs
}
if (entry >= 1 && entry <= 24) {
return entry;
}
System.out.printf("%nEnter a valid number: ");
}
}
在这种情况下,我更喜欢使用无限循环,但是这样做可能很危险,因此请谨慎使用。希望这会有所帮助!