【问题标题】:Scanner object skipping扫描仪对象跳过
【发布时间】:2014-10-26 02:27:38
【问题描述】:

这是我程序的主要方法。当调用 nextLine() 函数时,我遇到了 Scanner 解析变量 L 而不是空格的问题。不过,nextInt() 按预期工作。我的程序在尝试使用 Integer.parseInt() 函数解析空字符串时崩溃。

第一个输入是一个整数,指定将进行的行数,接下来的输入是空格分隔的整数。

Scanner s = new Scanner (System.in);
int l = s.nextInt();

for (int i = 0; i < l; i++){
    String space = s.nextLine();
    int x = Integer.parseInt(space.split(" ")[0]);
    int y = Integer.parseInt(space.split(" ")[1]);
    printPrimes(x, y);
    System.out.println();
}

堆栈跟踪如下:

Exception in thread "main" java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:592)
at java.lang.Integer.parseInt(Integer.java:615)
at Contests.SPOJ.SPOJ2.main(SPOJ2.java:43)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)

【问题讨论】:

  • 您能分享一些导致此异常的示例输入吗?
  • 我用数字 2 和 3 进行了测试,程序立即崩溃。程序不允许我输入 nextLine()。

标签: java loops java.util.scanner


【解决方案1】:

我通过在循环中添加这一行来修复您的程序:

    s = new Scanner(System.in);

下面的完整列表:

Scanner s = new Scanner (System.in);
int l = s.nextInt();

for (int i = 0; i < l; i++){
    s = new Scanner(System.in);
    String space = s.nextLine();
    int x = Integer.parseInt(space.split(" ")[0]);
    int y = Integer.parseInt(space.split(" ")[1]);
    printPrimes(x, y);
    System.out.println();
}

它按预期工作。

【讨论】:

  • 之所以有效,是因为第一个 Scanner 已经缓冲了一些输入,包括“剩余的”换行符。有关详细信息,请参阅下面的答案。
【解决方案2】:

nextInt 不会使用以下换行符,因此对nextLine 的下一次调用将是输入中剩下的唯一换行符('\n')。

在循环之前调用 nextLine 以丢弃它:

Scanner s = new Scanner (System.in);
int l = s.nextInt();
s.nextLine(); // Discarding the '\n'

for (int i = 0; i < l; i++){
    String space = s.nextLine();
...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    • 2023-03-30
    相关资源
    最近更新 更多