Я создаю меню, в котором пользователь должен вводить «1», «2» или «3» в зависимости от того, какие параметры он хочет, но если он что-то неправильно наберет, допустим, «4», , он получит сообщение об ошибке и снова появится в меню. Должен ли я вставить Do Loop внутри Try Catch или наоборот? Благодаря!Nesting Do Loop and Try Catch
ответ
Здесь нет необходимости использовать петли.
Вы можете использовать if else if
или просто использовать случаи switch
.
switch (input) {
case 1:
// menu 1;
break;
case 2:
// menu 2;
break;
case 3:
// menu 3;
break;
default:
// error
break;
}
Вместо использования try-catch
в цепи. Вместо этого вы можете использовать простой switch-case
.
Вот фрагмент кода:
public static void main (String[] args) throws Exception {
Scanner in = new Scanner(System.in);
while(in.hasNext()) {
switch(in.nextInt()) {
case 1: System.out.println("1 Entered..."); break;
case 2: System.out.println("2 Entered..."); break;
case 3: System.out.println("3 Entered..."); break;
default: System.out.println("Invalid!");
}
}
}
Вход:
1
2
5
Выход:
1 Entered...
2 Entered...
Invalid!
Возможно, вы захотите включить выход из цикла, если будет сделан правильный выбор. – Tiz
@ Tiz Да, он может поставить 'break' и выйти из цикла в любое время, когда захочет. – user2004685
int g =0;
while(true) {
try {
System.out.print("Enter your guess: ");
g = input.nextInt();
if(g<0){
break;
}
} catch (Exception e) {
System.err.println("Not a valid input. Error :");
//continue;
}
}
, если вы используете try catch block
внутри while loop
будьте осторожны exception will be thrown
БТ loop
будет продолжаться, так как условие в то время как цикл верно, так что вам нужно break
цикл while
и вы можете продолжить цикл, если вы используете continue;
внутри блока улова, который я комментировал в своем коде
Это, как правило, лучше использовать объектную ориентацию для таких вещей, в первую очередь шаблон команды в сочетании с фабрикой.
public interface Command {
String name();
void execute();
}
public class OptionOne implements Command {
public String name() {
return "1";
}
public void execute() {
System.out.println("Executing option 1");
}
}
// command classes OptionTwo and OptionThree omitted
public class CommandFactory {
private static final Command[] commands = {
new OptionOne(),
new OptionTwo(),
new OptioneThree()
};
public static Command getInstance(String input) {
for (Command command : commands) {
if (command.name().equals(input)) {
return command
}
}
throw new IllegalArgumentException("no command known for input: " + input);
}
}
public class Application {
public static void main(String[] args) {
String input = args[0].trim();
try {
CommandFactory.getInstance(input).execute();
}
catch(IllegalArgumentException e) {
// logged message
System.err.println(e.getMessage());
// message for the user
System.out.println("Could not handle input");
}
}
}
Это просто, чтобы показать эту идею. Код не проверен.
В общем, когда вы обнаруживаете, что создаете условие или переключатель, для которого потребуется новый сегмент для каждого используемого варианта, который вы добавляете в будущем, обычно лучше использовать шаблон, такой как этот, чтобы инкапсулировать логику в отдельную классы.
- 1. do while loop with try catch
- 2. java try and catch..infinite loop
- 3. try catch loop issue
- 4. Javascript try and catch
- 5. Try/Catch and threading
- 6. try and catch error
- 7. Понимание try and catch
- 8. cin and try/catch
- 9. Basic Try And Catch
- 10. Использование Try and Catch
- 11. try/catch and return
- 12. do try catch swift 2
- 13. Try Catch With Loop Java
- 14. try-catch in for loop
- 15. Do and While Loop
- 16. PHP Try and Catch или @
- 17. PHP Try and Catch Exception
- 18. try and catch not working
- 19. Try and Catch with Throws
- 20. Try and Catch in phpmailer
- 21. Android - Использование try and catch
- 22. Java try and catch method
- 23. Loop in try catch block
- 24. Loop не работает при использовании try and catch на android
- 25. Do-while, ошибка цикла try-catch
- 26. do while проблема с try catch включен
- 27. do-try-catch много строк кода
- 28. do-try-catch usage in Swift 2
- 29. Ruby Do loop and iteration
- 30. Добавление Try and Catch к существующей программе
Вместо этого вы можете использовать 'switch-case'! – user2004685
Не используйте try/catch для нормального потока программы. Используйте его только для исключительных ситуаций. – Patrick