有一个排名,名称和受欢迎程度列表1 Jake 21021(排名,实际名称,当年有多少名婴儿获得该名称)我正在尝试将这三个单独的东西分开,并将它们分成数组。这样,如果用户搜索“Jake”排名:1弹出,21021也是如此。这就是我到目前为止...
import java.util.*;
import java.io.*;
public class Test
{
public static void main(String[] args)
{
Scanner inputStream = null;
try
{
inputStream = new Scanner(new FileInputStream("src/boynames.txt"));
}
catch (FileNotFoundException e)
{
System.out.println("Sorry we couldn't find the requested file...");
System.out.println("Exiting...");
System.exit(0);
}
//Initializing the BOY Variables
int[] counter = new int[1];
String[] name = new String[1];
int[] popularity = new int[1];
//End of initializing BOY variables
for (int i=0; i <1000;i++)
{
counter[0] = 1;
name[i] = inputStream.next();
popularity[i]=inputStream.nextInt();
System.out.print(counter[i] + " " + name[i] + " " + popularity[i] );
counter[i] = counter[i] + 1 ;
}
}
}
我一直收到错误
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at Test.main(Test.java:27)
任何帮助都会很棒! 感谢
答案 0 :(得分:1)
因为name数组的长度是1,所以name的最大索引是0.所以在i = 1的下一个循环迭代期间,这一行将超出范围。
name[i] = inputStream.next();
答案 1 :(得分:1)
乍一看,您正在创建大小为1(new int[1]
等)的数组,然后尝试访问for循环内的索引0-999。如果你想要一个数组中有1000个位置,就像你的for循环要求那样,那么你应该创建一个像new int[1000]
这样的数组。
答案 2 :(得分:1)
您已将name
初始化为大小为1的数组,但随后您引用name[i]
,其中i
的数量最多为1000. name[0]
有效,但是当你到达name[1]
时,你会得到例外。
您应该将name
初始化为String[1000]
。或者(更好的是)使用ArrayList,它在向其添加项目时进行扩展。