【问题标题】:InputMismatchError while scanning number扫描号码时出现 InputMismatchError
【发布时间】:2020-05-29 14:04:42
【问题描述】:

在尝试使用以下代码读取数字时生成InputMismatchError

Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {

    long number = sc.nextLong(); // Error here

    if (number % 2 == 0 && number != 0) {
        System.out.println("even");
    } else if (number % 2 != 0 && number != 0) {
        System.out.println("odd");
    } else if (number == 0) {
        System.out.println("");
    }
}

我不明白哪里出错了。 Eclipse编译程序没有错误。

以下是使用的控制台输入

1234.5

【问题讨论】:

  • 如果您输入的不是long,就会发生这种情况。您是否有机会在那里输入了非数字字符?此外,仅仅因为它编译并不意味着它会运行。
  • 你在命令行输入什么?另外,您可以更改为while (sc.hasNextLong()) {
  • 按照 JohnnyMopp 所说的去做并检查是否还有一个 long 可能会更安全,如果没有,则使用下一个单词并打印一条错误消息,告诉用户重新输入 long
  • 我输入整数,设置长,因为可能有很大的数字。 hasNextLong() 不起作用
  • Hyperskill 测试抛出错误,但 Eclipse 正常工作。

标签: java java.util.scanner system.in


【解决方案1】:

如果输入中的值可能包含一些非整数,则应检查下一个值是否为long。如果没有,请忽略它:

while (sc.hasNext()) {
    // Check if next is a long
    if (sc.hasNextLong()) {
        long number = sc.nextLong();

        if (number == 0) {
            System.out.println("");
        }
        else if (number % 2 == 0) {
            System.out.println("even");
        }
        else {
            System.out.println("odd");
        }
    }
    else {
        // Not a long, consume rest of line.
        // You might need to change this to sc.next() depending on requirements
        sc.nextLine();
    }
}

【讨论】:

    【解决方案2】:

    你可以这样做

    Scanner scan = new Scanner(System.in);
    long val = scan.nextLong();
    System.out.printf(String.valueOf(val));
    

    当你期待很长时间时,你应该从命令行传递非​​十进制数值。

    【讨论】:

      猜你喜欢
      • 2018-05-18
      • 2013-04-23
      • 1970-01-01
      • 1970-01-01
      • 2016-12-09
      • 1970-01-01
      • 1970-01-01
      • 2018-08-27
      • 1970-01-01
      相关资源
      最近更新 更多