Java 扫描器输入验证导致循环提前结束
Java Scanner input validation causing loop to end early
我正在用 for 循环填充双精度数组,循环运行用户在第 4 行输入的圈数。但是,正如我在图片中展示的那样:
我输入了 3 圈,问题提示了 3 次,但是我的数据验证吃掉了我正在寻找的输入之一。
我该如何解决这个问题?我觉得很简单。
import java.util.Scanner;
public class JK_FINALPRAC1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Time-Trial Statistics Program\n");
System.out.println("This program will ask you to input split-times for each lap or length of a race. The ");
System.out.println("program will then calculate some basic statistics from the split-times.\n");
System.out.print("Enter the number of laps or lengths in the race: ");
int arraySize = sc.nextInt();
Double[] lapArray = new Double[arraySize];
System.out.println("Now input the elapsed time (split time) in seconds for each lap/length of the race.");
int index = 1;
double currentNum = 0.0;
for(int i=0;i<arraySize;i++){
System.out.print("Time for lap or length #" + index + ": ");
currentNum = sc.nextDouble();
if(currentNum > 0 && currentNum < 61){
lapArray[i] = currentNum;
index++;
}else if(currentNum<0 || currentNum >60){
System.out.println("Invalid input! Time must be between 0 and 60.");
}
}
}
这很简单:为了确保您插入了一个 double 而没有吃一圈,将您的扫描仪输入行放在一个 while 循环中
do{
double x = scanner.nextDouble();
}while(x < 0 || x > 60);
除非 do-while 的条件为假,否则这不会提供 for-loop 递增计数器。
为了也打印验证:
double x = scanner.nextLine();
while( x < 0 || x > 60){
//print message
//scanner again
}
double currentNum = 0.0;
while (index < arraySize) {
System.out.print("Time for lap or length #" + (index + 1) + ": ");
currentNum = sc.nextDouble();
if (currentNum > 0 && currentNum < 61) {
lapArray[index] = currentNum;
index++;
} else if (currentNum < 0 || currentNum > 60) {
System.out.println("Invalid input! Time must be between 0 and 60.");
}
}
因为你是 运行 for 循环,我每次都会递增(即使你的验证失败)。
我正在用 for 循环填充双精度数组,循环运行用户在第 4 行输入的圈数。但是,正如我在图片中展示的那样:
我输入了 3 圈,问题提示了 3 次,但是我的数据验证吃掉了我正在寻找的输入之一。
我该如何解决这个问题?我觉得很简单。
import java.util.Scanner;
public class JK_FINALPRAC1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Time-Trial Statistics Program\n");
System.out.println("This program will ask you to input split-times for each lap or length of a race. The ");
System.out.println("program will then calculate some basic statistics from the split-times.\n");
System.out.print("Enter the number of laps or lengths in the race: ");
int arraySize = sc.nextInt();
Double[] lapArray = new Double[arraySize];
System.out.println("Now input the elapsed time (split time) in seconds for each lap/length of the race.");
int index = 1;
double currentNum = 0.0;
for(int i=0;i<arraySize;i++){
System.out.print("Time for lap or length #" + index + ": ");
currentNum = sc.nextDouble();
if(currentNum > 0 && currentNum < 61){
lapArray[i] = currentNum;
index++;
}else if(currentNum<0 || currentNum >60){
System.out.println("Invalid input! Time must be between 0 and 60.");
}
}
}
这很简单:为了确保您插入了一个 double 而没有吃一圈,将您的扫描仪输入行放在一个 while 循环中
do{
double x = scanner.nextDouble();
}while(x < 0 || x > 60);
除非 do-while 的条件为假,否则这不会提供 for-loop 递增计数器。
为了也打印验证:
double x = scanner.nextLine();
while( x < 0 || x > 60){
//print message
//scanner again
}
double currentNum = 0.0;
while (index < arraySize) {
System.out.print("Time for lap or length #" + (index + 1) + ": ");
currentNum = sc.nextDouble();
if (currentNum > 0 && currentNum < 61) {
lapArray[index] = currentNum;
index++;
} else if (currentNum < 0 || currentNum > 60) {
System.out.println("Invalid input! Time must be between 0 and 60.");
}
}
因为你是 运行 for 循环,我每次都会递增(即使你的验证失败)。