Для сброса цикла после исключения

В настоящее время я работаю над викториной с несколькими вариантами ответов. Но я застрял с этой проблемой. После исключения мой цикл for сбрасывается и в основном возвращается к 0. Есть ли другой способ решить эту проблему? Или мой код логически неверен? Всякий раз, когда возникает исключение, цикл for сбрасывается. Например, я отвечаю на вопрос № 5, и произошло исключение, цикл for возвращается к 0.

do{

  try {

  Scanner A = new Scanner (System.in);

  for (int x = 0; x < Questions.length;x++){

      loop = x;
      System.out.println(Questions[x]);
      System.out.println(Choices[x]);

      System.out.println("");
      System.out.print("Answer: ");

      UAnswer = A.nextLine();


      if (UAnswer.equalsIgnoreCase("A") || UAnswer.equalsIgnoreCase("B") || UAnswer.equalsIgnoreCase("C")){

          if (UAnswer.equalsIgnoreCase(AnswerKey[x])){
          System.out.println("");
          System.out.println("Correct Answer!\n");
          Score++;
          }
          else {
              System.out.println("");
              System.out.println("Wrong! The correct answer is: " + AnswerKey[x] + "\n");

          }

      }
      else if (UAnswer.equalsIgnoreCase("")){
          throw new NullPointerException();
        }
      else {
          throw new InputMismatchException(); 
        }

      }
  }
  catch(InputMismatchException ime){
  System.out.println("");
    System.out.println("Invalid input! Please type A,B,C!\n");

      }


  catch(NullPointerException b){
  System.out.println("");
  System.out.println("You did not input any answer.\n");

      }

    }while(loop != 9);

Где твой catch? Если вы обрабатываете исключение вне цикла, вы будете вне цикла, когда будете обрабатывать исключение.

David 31.01.2019 18:51

Что вы имеете в виду под «сбросом цикла for»? Вы просто выходите из цикла в случае исключения.

Seelenvirtuose 31.01.2019 18:52

Зачем бросать эти исключения? Просто переместите код обработки ошибок в блоки else if.

Johnny Mopp 31.01.2019 18:58
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
4
3
41
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

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

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