要求用户在不关闭程序的情况下输入双精度而不是字符串
Ask user to input a double instead of a String without making the program shutdown
嗨,我写了这段代码,要求用户输入一个数字:
public static double[] getscores()
{
int numscores=8;
double score[] = new double[numscores];
for (int a=0;a<numscores;a++)
{
Scanner ip=new Scanner(System.in);
System.out.println("Enter a score");
score[a]=ip.nextDouble();
}
return score;
}
万一用户不小心输入了一个String,我该如何在不关闭程序的情况下告诉他输入一个数字呢?谢谢你
一个快速但 "dirty" 的解决方案是使用 try-catch:
public static double[] getscores() {
int numscores = 8;
double score[] = new double[numscores];
for (int a = 0; a < numscores; a++) {
Scanner ip = new Scanner(System.in);
System.out.println("Enter a score");
try{
score[a] = ip.nextDouble();
} catch(InputMismatchException ime) {
System.out.println("Wrong input");
a--;
}
}
return score;
}
用户总是输入字符串; Scanner#nextDouble()
是一种将字符串输入解释为 double
.
的便捷方法
编写一个持续读取输入直到输入双精度值的方法:
static double readDouble(Scanner scanner) {
double score;
while (true) {
System.out.println("Enter a score");
String input = scanner.nextLine();
try {
score = Double.parseDouble(input);
break;
} catch (NumberFormatException e) {
System.out.println("'" + input + "' is not a valid score");
}
}
return score;
}
然后从循环中调用它:
score[a] = readDouble(ip);
你应该捕获当用户没有输入双精度时抛出的异常,要求用户再次尝试插入双精度,并在你试图读取双精度的那一行继续循环,直到用户真正输入一个双。或者,当用户输入双精度时,您可以使用 while(true)
和 break
语句,这可能更简洁,但更易读。
public static double[] getscores() {
int numscores = 8;
double score[] = new double[numscores];
for (int a = 0; a < numscores; a++) {
Scanner ip = new Scanner(System.in);
System.out.println("Enter a score");
boolean isDouble = false;
do {
try {
score[a] = ip.nextDouble();
isDouble = true;
} catch (InputMismatchException ex) {
System.out.println("You didn't enter a double, please try again");
}
} while (!isDouble);
}
return score;
}
嗨,我写了这段代码,要求用户输入一个数字:
public static double[] getscores()
{
int numscores=8;
double score[] = new double[numscores];
for (int a=0;a<numscores;a++)
{
Scanner ip=new Scanner(System.in);
System.out.println("Enter a score");
score[a]=ip.nextDouble();
}
return score;
}
万一用户不小心输入了一个String,我该如何在不关闭程序的情况下告诉他输入一个数字呢?谢谢你
一个快速但 "dirty" 的解决方案是使用 try-catch:
public static double[] getscores() {
int numscores = 8;
double score[] = new double[numscores];
for (int a = 0; a < numscores; a++) {
Scanner ip = new Scanner(System.in);
System.out.println("Enter a score");
try{
score[a] = ip.nextDouble();
} catch(InputMismatchException ime) {
System.out.println("Wrong input");
a--;
}
}
return score;
}
用户总是输入字符串; Scanner#nextDouble()
是一种将字符串输入解释为 double
.
编写一个持续读取输入直到输入双精度值的方法:
static double readDouble(Scanner scanner) {
double score;
while (true) {
System.out.println("Enter a score");
String input = scanner.nextLine();
try {
score = Double.parseDouble(input);
break;
} catch (NumberFormatException e) {
System.out.println("'" + input + "' is not a valid score");
}
}
return score;
}
然后从循环中调用它:
score[a] = readDouble(ip);
你应该捕获当用户没有输入双精度时抛出的异常,要求用户再次尝试插入双精度,并在你试图读取双精度的那一行继续循环,直到用户真正输入一个双。或者,当用户输入双精度时,您可以使用 while(true)
和 break
语句,这可能更简洁,但更易读。
public static double[] getscores() {
int numscores = 8;
double score[] = new double[numscores];
for (int a = 0; a < numscores; a++) {
Scanner ip = new Scanner(System.in);
System.out.println("Enter a score");
boolean isDouble = false;
do {
try {
score[a] = ip.nextDouble();
isDouble = true;
} catch (InputMismatchException ex) {
System.out.println("You didn't enter a double, please try again");
}
} while (!isDouble);
}
return score;
}