#java #switch-statement #try-catch
#Ява #переключатель-заявление #попробуй-поймай
Вопрос:
У меня возникла проблема, из-за которой моя инструкция switch выполняется до того, как будет решена моя инструкция try catch. Я пытался перестроить свой код всеми доступными мне способами, но, похоже, не смог этого понять.
public static void main(String[] args) { Scanner input = new Scanner(System. in ); //declare scanner object called input for user input char operation; double num1 = 0; double num2 = 0; System.out.println("This calculator can perform basic mathematic functions such as " "addition, subtraction, multiplication, and division. " "nOnce you are finished using the calculator please enter a ! character."); System.out.println("Please enter in which operation you would like to perform. " "Enter for addition, - for subtraction, * for multiplication " "and / for division."); operation = input.next().charAt(0); boolean continueLoop = true; while (operation != '!') { do { try { System.out.println("Please enter the first number for your calculation."); num1 = input.nextDouble(); System.out.println("Please enter the second number for your calculation."); num2 = input.nextDouble(); continueLoop = false; } catch(InputMismatchException e) //code that executes if exception InputMismatchException named e is found in code { System.err.printf("Exception: %s%n", e); //prints out the exception found input.nextLine(); System.out.println("You must enter numbers. Please try again."); } } while ( continueLoop ); Calculator allMath[] = new Calculator[4]; allMath[0] = new Addition(num1, num2, operation); allMath[1] = new Subtraction(num1, num2, operation); allMath[2] = new Multiplication(num1, num2, operation); allMath[3] = new Division(num1, num2, operation); switch (operation) { case ' ': allMath[0].calculate(); break; case '-': allMath[1].calculate();; break; case '*': allMath[2].calculate(); break; case '/': allMath[3].calculate(); break; default: System.out.println("Please enter a valid operation"); } System.out.println("Please enter in which operation you would like to perform. " "Enter for addition, - for subtraction, * for multiplication " "and / for division."); operation = input.next().charAt(0); } }
Я знаю, что существуют гораздо более простые способы создания базовой программы калькулятора, но эта программа реализует все требования, которые у меня есть для моего окончательного проекта. Если бы кто-нибудь мог помочь мне понять, что я сделал не так, это было бы здорово.
Я прикрепил фотографию своего вывода, чтобы вы могли видеть, где я ошибаюсь. Как вы можете видеть, программа выполняется правильно, за исключением того факта, что, как только я ввожу неверный номер, она берет мои ранее введенные номера и запускает их через мой оператор switch, прежде чем повторно выполнить мой оператор try catch.
Комментарии:
1. Вы отладили свое приложение?
2. @JeenbekKhydyr: Под ним нет кода.
3. System.err и System.out-это разные потоки, и они могут появляться на вашем терминале в разное время. Если вы показываете что-то пользователю для распознавания, просто используйте System.out.
4. Это не проблема… Проблема в том, что что-то было установлено, и приложение оставило это на время… Приложение снова вводит do while, но что-то не было сброшено… Было бы лучше использовать break вместо установки чего-то и делать, пока это правда… Что-то является переменным, что, очевидно, является проблемой здесь
5. Похоже
continueLoop
, что и управляемый им цикл do-while предназначены для запуска до тех пор, пока не будет введен допустимый ввод. В этом случае вы должны были поместитьboolean continueLoop = true;
в качестве первого утверждения послеwhile (operation != '!')