【问题标题】:Strange Bug in JAVA [duplicate]JAVA中的奇怪错误[重复]
【发布时间】:2018-04-04 12:33:59
【问题描述】:

我有一个有趣的错误需要修复。代码很长而且很复杂,但我希望这对于有更多经验的人来说只是一个简单的问题,而不必全部发布。在下面的代码中,它将提示问题和答案。一旦我在重量上添加了双倍(以便我稍后可以进行限制重量的计算),它开始跳过下一个问题。它会显示它,但是下一个问题将显示在同一行,并且无法回答第一个问题。代码如下:

System.out.print("Enter Item Name: ");
cat.setName(input.nextLine());
System.out.print("Enter Weight(lbs) - Max 25 Tons: ");
cat.setWeight(input.nextDouble());
System.out.print("Enter Value: "); //This is the line that will get skipped
cat.setValue(input.nextLine());
System.out.print("Durability (weak = 1, medium = 2, tough = 3): ");
cat.setDurability(input.nextLine());
System.out.print("Enter ID: ");
cat.setId(input.nextLine());

输出将如下所示:

Enter Value: Durability (weak = 1, medium = 2, tough = 3):

代替:

Enter Value:
Durability (weak = 1, medium = 2, tough = 3): 

在尝试调试时,我注释掉了 Value,下一行也会发生同样的事情。这告诉我这与前面的双精度有关,但我不知道如何解决它。

提前致谢!

【问题讨论】:

    标签: java string java.util.scanner


    【解决方案1】:

    这不是错误,而是功能!与nextLine() 不同,nextDouble() 不会将位置设置为下一行的开头。

    【讨论】:

    • 谢谢。那我怎样才能得到想要的功能呢?
    • 之后拨打input.nextLine();消费线路。
    • 知道了!谢谢!
    【解决方案2】:

    我面前没有电脑来测试这个,但我 99% 确定我知道发生了什么:

    nextDouble 可能会读取字符,直到找到不属于双精度的字符,然后将下一个字符留在输入缓冲区中。在这种情况下,这意味着在输入缓冲区完成后会有一个新行。

    然后,当您尝试读取一行文本时,该方法会查看输入缓冲区,立即看到一个换行符,因此返回一个空字符串。

    【讨论】:

    • 这听起来确实是个问题!有没有办法让它不以这种方式填充,或者我可以使用另一个表达式而不是 double 仍然让我以后做数学?
    • 我可能会使用 newLine 将双精度作为字符串读取,然后将其单独转换为双精度。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    相关资源
    最近更新 更多