Scanner.nextInt()的工作原理与Scanner.nextLine()相比如何?

时间:2016-10-08 22:34:32

标签: java

我最近刚刚开始使用Java。有一个练习要求我拆分并显示由空格键分隔的数字。 标准输入基本上是这样的:

2
2 2

第一行是数组中的整数数。 第二行是数组 这是我使用的第一个代码块

   import java.util.*;

/* Name of the class has to be "Main" only if the class is public. */
public class Main
{
    public static void main (String[] args) 
    {
        Scanner reader= new Scanner(System.in);
        int t=reader.nextInt();
        String []s=reader.nextLine().split(" ");
        for(int i=0;i<=t-1;i++)
        {
            System.out.println("The "+(i+1) +" number is "+s[i]);
        }
    }
}

编译运行时,它会给我这个错误

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
    at Main.main(Main.java:15)

然而,当我将reader.nextInt()更改为reader.nextLine()并将其解析为整数时,它可以正常工作

import java.util.*;

/* Name of the class has to be "Main" only if the class is public. */
public class Main
{
    public static void main (String[] args) 
    {
        Scanner reader= new Scanner(System.in);
        int t=Integer.parseInt(reader.nextLine());
        String []s=reader.nextLine().split(" ");
        for(int i=0;i<=t-1;i++)
        {
            System.out.println("The "+(i+1) +" number is "+s[i]);
        }
    }
}

这是输出的样子

The 1 number is 2
The 2 number is 2

那么为什么它不适用于reader.nextInt()?

关于阅读Line字符的编辑,我仍然没有得到它。它通常读取字符串

1 个答案:

答案 0 :(得分:0)

int t=reader.nextInt();

读取2.

reader.nextLine()

读取下一个换行符。

再次调用 将按预期读取2 2

检查s的内容。它可能是空的,或者没有2个元素,因此错误

当您阅读该行两次时,您将使用换行符

有关详细信息,请参阅Scanner is skipping nextLine() after using next(), nextInt() or other nextFoo() methods