将文本文件中的名称和数字放入数组中

时间:2012-04-24 02:18:32

标签: java arrays file text

有一个排名,名称和受欢迎程度列表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)

任何帮助都会很棒! 感谢

3 个答案:

答案 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,它在向其添加项目时进行扩展。