我是Java的新手。
我目前正在做一个辅助项目,制作一个基于文本的游戏。我意识到使用开关语句对这种类型的游戏非常有用。
所以这基本上就是它的工作原理。
我问用户,你想做什么?
那么,与“再次询问用户的默认语句”一起构建switch-statement和Scanner的最佳方法是什么?
我一直在这样做(我的代码在这里),但它似乎有很多潜在的问题。
你们能给我一些关于如何用switch-statement制作最佳Scanner的提示吗?
先谢谢你。
public static void ask() {
Scanner sc = new Scanner(System.in);
System.out.println("What do you want to do?");
while (!sc.hasNextInt()) {
sc.next();
}
select = sc.nextInt();
switch (select) {
case 1:
eat();
break;
case 2:
walk();
break;
case 3:
sleep();
break;
default:
System.out.println("choose from 1 to 3");
ask(); //would you re call itself again here? or is there any otherway to do without recalling itself?
}发布于 2018-09-11 05:17:52
您的代码看起来不错,但我会重构它。还添加while循环以再次询问:
public static void ask() {
Scanner sc = new Scanner(System.in);
boolean isWrongAnswer;
do {
isWrongAnswer = false;
System.out.println("What do you want to do?");
switch (sc.nextInt()) {
case 1:
eat();
break;
case 2:
walk();
break;
case 3:
sleep();
break;
default:
System.out.println("choose from 1 to 3");
isWrongAnswer = true;
}
} while (isWrongAnswer);
}发布于 2018-09-11 05:29:44
最好先检查扫描仪是否有什么东西,然后检查它是否为int值。为此,可以使用sc.hasNext() & sc.hasNextInt(),如下所示,
public static void ask() {
Scanner sc = new Scanner(System.in);
System.out.println("What do you want to do?");
while (sc.hasNext()) {
int select = 0;
if (sc.hasNextInt()) {
select = sc.nextInt();
}
switch (select) {
case 1:
System.out.println("call eat()");
break;
case 2:
System.out.println("call walk()");
break;
case 3:
System.out.println("call sleep()");
break;
default:
System.out.println("choose from 1 to 3");
ask();
}
}发布于 2018-09-11 05:36:52
我建议你在这种情况下使用字符串。以提高代码的可读性,并避免错误。(http://www.oracle.com/technetwork/java/codeconventions-150003.pdf)
private static final String EAT = "1";
private static final String WALK = "2";
private static final String SLEEP = "3";
public void ask() {
Scanner sc = new Scanner(System.in);
System.out.println("What do you want to do?");
switch (sc.next()) {
case EAT:
eat();
break;
case WALK:
walk();
break;
case SLEEP:
sleep();
break;
default:
System.out.println("choose from 1 to 3");
ask(); // as described above via "do while", but there is nothing wrong with recursion. The garbage collector works.
}
}https://stackoverflow.com/questions/52269018
复制相似问题