我最近刚刚开始使用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字符的编辑,我仍然没有得到它。它通常读取字符串
答案 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