В настоящее время я работаю над викториной с несколькими вариантами ответов. Но я застрял с этой проблемой. После исключения мой цикл 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);
Что вы имеете в виду под «сбросом цикла for»? Вы просто выходите из цикла в случае исключения.
Зачем бросать эти исключения? Просто переместите код обработки ошибок в блоки else if.




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