【问题标题】:input.nextLine() does not wait for input, and runs a method immediatelyinput.nextLine() 不等待输入,立即运行一个方法
【发布时间】:2014-02-11 05:02:35
【问题描述】:

我正在做一个程序,它允许我将电阻值解码为颜色。然而,即使在网上搜索了解决方案后,我仍然不明白为什么我无法修复它。我刚学了大约 4 个月,所以我是这方面的业余爱好者。

它应该像这样运行:Menu>Select1>FirstColour>Selection>SecondColour>Selection>FourthColour>Selection>FifthColour>Selection>ShowDecodedColour>LoopToMenu。

但是当我在菜单中选择1时,我立即得到“输入第一个颜色条的号码:无效号码请重新输入您的号码:”

我检查了我的 int 激活器的值,它总是 -1。

请帮忙!

我的代码:http://pastebin.com/ezVHLxYj

这是工作代码,但是因为它是可崩溃的,所以教授要求我使用 switch 函数而不是 else-if,以及其他一些问题,例如将 String 转换为 Int 以防止读取输入时出错:http://pastebin.com/6YM4ztZXo

【问题讨论】:

  • IMO 代码太多...不过有一个提示:将 switch 语句更改为简单的:four[k] = OneColour[activator];
  • Read this post,在nextLine()之前使用nextInt()是一个常见的错误
  • @alfasin haha​​ 是的,这是我的编程项目,所以教授期待程序员的高质量工作:(嗯,是的,我明白你的想法。我使用了 switch 功能,所以如果数字无效,无论字符或数字,它会打印“无效”。有没有办法跟进你的方法?
  • @Christian 谢谢!那行得通!尽管我输入了正确的数字,但我仍然收到无效消息:(
  • 是的,使用 try/catch:try{ a = Integer.parseInt(choices);} catch(NumberFormatException e){ a = -1;} finally{ return a;}

标签: java string loops input


【解决方案1】:

出现问题是因为nextInt() 没有读取用户输入的换行符(当他按下Enter 时)。因此,这个换行符保留在缓冲区中,nextLine() 方法会使用它。这就是为什么看起来nextLine() 被跳过的原因。欲了解更多信息,请访问此帖子:Using nextInt() before nextLine()

注意事项:

switch(choices) ... 中的行

a = Integer.parseInt("0");

可以简单地替换为

a = 0;

每种情况都相似。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    • 2023-02-14
    • 2019-05-08
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多