Java 要求用户在不关闭程序的情况下输入双精度字符而不是字符串
Hy,我写了一段代码,要求用户输入一个数字:Java 要求用户在不关闭程序的情况下输入双精度字符而不是字符串,java,string,double,shutdown,Java,String,Double,Shutdown,Hy,我写了一段代码,要求用户输入一个数字: 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();
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;
}
publicstaticdouble[]getscores()
{
int numcores=8;
双倍得分[]=新的双倍[numscores];
对于(int a=0;a而言,快速但“脏”的解决方案是使用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;
}
publicstaticdouble[]getscores(){
int numcores=8;
双倍得分[]=新的双倍[numscores];
对于(int a=0;a
用户总是在输入字符串;Scanner#nextDouble()
是一种将字符串输入解释为双精度的方便方法
编写一个方法,在输入双精度之前一直读取输入:
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
语句,当用户输入一个double时,这可能更干净,但可读性更强
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;
}
publicstaticdouble[]getscores(){
int numcores=8;
双倍得分[]=新的双倍[numscores];
对于(int a=0;a
阅读Java中的try…catch。这不起作用。将异常用于流控制是个坏主意。请改用hasNextDouble()
。但它不起作用的原因是nextDouble()
在失败时不会使用坏令牌,因此它将永远循环。您还应该在循环内创建扫描仪
。它在InputMismatchException上显示一个错误,说明:找不到符号类InputMismatcheException@AmadouToure您需要导入java.util.InputMismatchException
@Amadou Toure:它可能会像请记住,这只是一个快速而肮脏的黑客攻击。您不应该在循环中构造扫描仪。