【问题标题】:Java Scanner using old input [duplicate]使用旧输入的 Java Scanner [重复]
【发布时间】:2017-04-25 12:43:43
【问题描述】:

我的扫描仪/Eclipse 似乎自动运行用户输入。我有一个扫描仪初始化为:

Scanner in = new Scanner(System.in);

菜单如下:

@Override
void update() {
    //welcome
    System.out.println("-----Welcome to the Pet Game-----");
    System.out.println();
    System.out.println("1. Play");
    System.out.println("2. Help");
    System.out.println("3. Dev Mode");
    int choice = in.nextInt();
    switch(choice){
    case 1:
        playLoop();
        break;
    case 2:
        helpPage();
        break;
    case 3:
        devMode();
        break;
    }

}

由于某种原因,它会在此菜单上自动输入 2。并在此菜单上跟随 3:

// main menu
        System.out.println("This is Day " + (i+1) + " you have " + dayActions + " Actions left.");
        System.out.println("1. View Pet Status");
        System.out.println("2. Shop");
        System.out.println("3. Skip Action");
        System.out.println("4. Play");
        System.out.println("5. Feed");
        System.out.println("6. Bathroom");
        System.out.println("7. Sleep");

        int choice = in.nextInt();
        System.out.println();

我认为这可能是由于我的 GameState 课程,但我不确定。 游戏状态类:

abstract class GameState {

    abstract void update();

    protected void pushState(GameState state) {
        PetGame.pushState(state);
    }

    protected void popState() {
        PetGame.popState();
    }
}

StoreState(这是它要跳转到的类。我在我的代码中找不到对它的任何引用,不知道为什么会出现在这里。)

public class StoreState{

    @Override
    void update() {
        // TODO Auto-generated method stub

    }


}

感谢您的帮助。

【问题讨论】:

  • 不要在您的问题得到解决时更新您的问题。这完全改变了最初问题的背景。你这样做并没有给任何人带来任何好处。而是在你原来的问题下面附加一个编辑部分,说明你面临的新问题。
  • @OusmaneMahyDiaw 您的意图通常是正确的,但 “而是在原始问题下方添加一个编辑部分,说明您面临的新问题” 是错误的。必须在新帖子/问题中提出新问题(这已在 meta 上多次询问和讨论,例如:meta.stackoverflow.com/questions/298948/…
  • @Tom 谢谢,还在学习你看到的系统^^。赞赏。
  • @OusmaneMahyDiaw 不客气。

标签: java


【解决方案1】:

在遇到特定的case 后,您需要使用break 语句跳出switch 语句,否则,您将得到一个称为fallthrough 的东西。

case 1:
    playLoop();
    break;
case 2:
    helpPage();
    break;
case 3:
    devMode();
    break;

【讨论】:

  • 第一:这个问题是骗人的,所以不要回答它(而是标记它)。第二个:在case 之后和实际方法调用之前的break
  • 我称之为:不要发布不好的答案。
  • 我已经添加了它们,但由于可能是 StoreState,它似乎仍在停止?
  • 现在没有对 Store 状态的引用(我现在已将它从 GameState 的子类中删除),但它仍在跳回 StoreState。我试过重启我的 IDE 没有修复。
猜你喜欢
  • 2014-06-20
  • 2012-08-18
  • 2014-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多