首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扫描器+开关使用

扫描器+开关使用
EN

Stack Overflow用户
提问于 2018-09-11 05:09:13
回答 3查看 9.7K关注 0票数 0

我是Java的新手。

我目前正在做一个辅助项目,制作一个基于文本的游戏。我意识到使用开关语句对这种类型的游戏非常有用。

所以这基本上就是它的工作原理。

我问用户,你想做什么?

  1. 步行
  2. 等。

那么,与“再次询问用户的默认语句”一起构建switch-statement和Scanner的最佳方法是什么?

我一直在这样做(我的代码在这里),但它似乎有很多潜在的问题。

你们能给我一些关于如何用switch-statement制作最佳Scanner的提示吗?

先谢谢你。

代码语言:javascript
复制
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?

        }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-09-11 05:17:52

您的代码看起来不错,但我会重构它。还添加while循环以再次询问:

代码语言:javascript
复制
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);
}
票数 1
EN

Stack Overflow用户

发布于 2018-09-11 05:29:44

最好先检查扫描仪是否有什么东西,然后检查它是否为int值。为此,可以使用sc.hasNext() & sc.hasNextInt(),如下所示,

代码语言:javascript
复制
 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(); 

                }
            }
票数 0
EN

Stack Overflow用户

发布于 2018-09-11 05:36:52

我建议你在这种情况下使用字符串。以提高代码的可读性,并避免错误。(http://www.oracle.com/technetwork/java/codeconventions-150003.pdf)

代码语言:javascript
复制
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.
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52269018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档