【问题标题】:Java - nextLine(); within a switch statementJava - nextLine();在 switch 语句中
【发布时间】:2011-05-16 09:00:21
【问题描述】:

我有一个 switch 语句充当菜单,在此我试图读取用户输入。目前我正在使用variable=in.next();,这很有效。但是它只会读取一个单词,并且有时用户可能需要输入更多单词,所以我尝试使用variable=in.nextLine();,它可以编译,但是当我运行程序时,我从菜单中选择了我的选择,它会跳过阅读并返回菜单。

任何帮助将不胜感激,谢谢:)

【问题讨论】:

    标签: java switch-statement next java.util.scanner


    【解决方案1】:

    您要么必须从用户输入中删除换行符 \n,要么假设它在您的 switch 语句中。

    几乎是因为您决定使用 nextLine(),所以用户输入到计算机的内容将如下所示

     f\n
    

    所以只需相应地比较字符串!

    【讨论】:

      【解决方案2】:

      开关选择器只能是整数、短整数、字符或枚举。字符串不能用作开关选择器。

      如果我对您的理解正确,您希望使用用户输入的单词来控制您的流程。如果您有预定义的单词列表,我建议您使用枚举:

      枚举单词{ 开始,停止,哔哔声, }

      现在用户输入一个单词哔。你可以说:

      Words command = Words.valueOf();
      ///
      switch (command) {
          case start: /* start something */ break;
          case stop: /* stop something */ break;
          case beep: /* beep!!! */ break;
          default: throw new IllegalArgumentException("Unknown command " + command);
      }
      

      【讨论】:

      • 查看我对 vic 回答的评论。它不会编译。
      【解决方案3】:

      好吧,我认为我在 Java 方面太无能,而且我的问题提出得很糟糕。

      当我接受用户输入时,它只需要 1 个单词,我希望它基本上接受他们输入的所有内容,而当我使用 nextLine 时,这只是跳过阅读并让我重新选择一个选项。

      【讨论】:

      • 您是如何获得到 Dropbox 文件的简单链接的?
      • 在资源管理器、保管箱中右键单击文件,复制公共链接。有没有机会帮助解决这个问题? :P
      【解决方案4】:

      只需使用:

      name=in.nextLine();
      

      String choice = in.nextLine();
      

      这应该在构造函数中,并且在 runApp 的顶部。

      这样,您不会将新行留在缓冲区中(它将用于例如dp)。

      你应该有:

      dp=in.nextLine();
      

      如您的问题中所述。

      【讨论】:

      • 我还是有同样的问题,除非我误解了你的答案,很有可能是因为我很久没有编程了。
      • @Ben,我用你的代码测试了它。我不得不注释掉对您未包含的方法的调用。您可以发布您当前的代码(您可以编辑问题并使用 101 按钮进行格式化)?
      • 无法让编辑器正常工作,希望您能理解这一点。如您所见,我已经输入了dp=in.nextLine();,但这就是给我错误的原因。
      • @Ben,对,但您没有更改顶部的 String choice 行。
      • 完成了,它编译了,但现在当我输入 start 并按回车键调出菜单时我得到了这个:java.lang.StringIndexOutOfBoundsException: String index out of range: 0 (in java.lang.String)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多