我正在创建一个菜单,用户应该输入" 1"," 2"或" 3"取决于他想要的选项,但如果他输入了错误的内容,请说出#34; 4",他会收到一条错误消息,然后再次进入菜单。我应该在Try Catch中嵌套Do Loop,还是相反?谢谢!
答案 0 :(得分:1)
而不是在循环中使用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!
答案 1 :(得分:1)
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
将继续,因为while循环的条件为true,因此您需要{ {1}} break
循环,如果你在我的代码中注释的catch块中使用while
,你可以继续循环
答案 2 :(得分:0)
这里没有必要使用循环。
您可以使用if else if
或仅使用switch
个案例。
switch (input) {
case 1:
// menu 1;
break;
case 2:
// menu 2;
break;
case 3:
// menu 3;
break;
default:
// error
break;
}
答案 3 :(得分:0)
通常最好将面向对象用于此类事物,最明显的是将命令模式与工厂结合使用。
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");
}
}
}
这只是为了表明这个想法。代码未经测试。
一般情况下,当您发现自己创建一个条件或开关,对于您将来添加的每个用例都需要一个新的段时,通常最好使用这样的模式将逻辑封装在单独的类中