Если во время итерации цикла введен недопустимый ввод, как мне заставить цикл снова запуститься на его текущей итерации

Я новичок в программировании и работаю над назначением Java, в котором пользователь называет файл. Затем файл передается методу для записи пользователем оценок за тест, а затем передается другому методу для чтения и отображения оценок за тест со средним значением класса.

В настоящее время я работаю над методом записи оценок студентов в файл, который я успешно выполнил, но мне нужно реализовать проверку ошибок, если введено нечисловое значение. Я использовал цикл while с try and catch для InputMismatchException, цикл иногда работает. Если недопустимый ввод введен на первой итерации цикла, он поймает его и повторит, однако, если недопустимый ввод будет введен на любой другой итерации, кроме первой, он поймает InputMismatchException, но он также выйдет из цикла и продолжит к следующему методу. Как заставить цикл запускаться на недействительной итерации цикла. Я был бы признателен за любую помощь, и мне очень жаль, если мой код написан плохо, поскольку я новичок в программировании.

Вот метод, над которым я работаю:

 public static void inputScores(String newFile) 
{
    Scanner scan = new Scanner(System.in);
    Formatter write;

    try
    {
        write = new Formatter(newFile +".txt");

        double score = 0.0;
        int count = 1;
        boolean again = false;          


        while(!again){
            try
            {
                while(score >= 0)
                {
                System.out.print("Please enter student " + count + "'s test score, input -1 to quit:\n>");
                score = scan.nextDouble();
                again = true;
                count++;

                   if (score >= 0)
                   {
                       write.format("%.2f%n", score);
                   }
                   else if (score <= -1)
                   {
                       break;
                   }                                    
                }                    
            }
            catch(InputMismatchException ex){
                    System.out.println("Invalid input, Student's scores must be a number");
                    scan.next();
                }       
        }
         write.close();
    }

    catch(FileNotFoundException e)
    {
        System.out.println(e.getMessage());
    }      
}  
catch(InputMismatchException ex){ again = false; }?
fantaghirocco 14.11.2018 18:20
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
47
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Try this code. Hope this will fulfill your requirement.

    public static void inputScores(String newFile) {
        Scanner scan = new Scanner(System.in);
        Formatter write=null;
        try {
            write = new Formatter(newFile + ".txt");
            double score = 0.0;
            int count = 1;
            while(true) {
                try {
                System.out.println("Please enter student " + count + "'s test score, input -1 to quit:\n>");
                score = scan.nextDouble();
                count++;
                if (score>=0)
                    write.format("%.2f%n", score);
                else
                    break;
                }catch (InputMismatchException e) {
                    System.err.println("Invalid input, Student's scores must be a number");
                    scan.next();
                    System.out.println();
                }
            }
            write.close();
            scan.close();
        }
        catch (FileNotFoundException e) {
            System.out.println(e.getMessage());
        }
    }

Да! Это работает. Большое вам спасибо, вы очень цените!

EiffelFlowers 14.11.2018 18:34

@EiffelFlowers. Если вы получили свой ответ, проголосуйте и отметьте, что ответили, или, если у вас недостаточно репутации, то, по крайней мере, он понравится.

Altaf Ansari 14.11.2018 18:43

Другие вопросы по теме