Попросите пользователя ввести двойную строку вместо строки, не отключая программу - PullRequest
0 голосов
/ 14 мая 2018

Хи, я написал этот фрагмент кода, где я прошу пользователя ввести число:

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;
}

В случае, когда пользователь случайно вводит строку, как я должен сказать емуввести номер без выключения программы?Спасибо тебе

Ответы [ 3 ]

0 голосов
/ 14 мая 2018

Пользователь всегда вводит строку;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);
0 голосов
/ 14 мая 2018

Вы должны поймать исключение, выдаваемое, когда пользователь не вводит двойное число, попросить пользователя попытаться снова вставить двойное и продолжать цикл в той строке, где вы пытаетесь прочитать двойное число, пока пользователь фактически не введетдвойной.В качестве альтернативы вы можете использовать операторы 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;
}
0 голосов
/ 14 мая 2018

Быстрое, но "грязное" решение будет с использованием 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;
}
...