扫描仪对象跳过

时间:2014-09-01 21:10:14

标签: java loops java.util.scanner

这是我程序的主要方法。当调用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 个答案:

答案 0 :(得分:2)

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

在循环之前调用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();
...

答案 1 :(得分: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();
}

它按预期工作。