0

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

任何帮助都是极好的!谢谢

4

3 回答 3

1

由于 name 数组的长度为 1,因此 name 的最大索引为 0。因此在 i=1 时的下一次循环迭代期间,该行将超出范围。

name[i] = inputStream.next(); 
于 2012-04-24T02:22:54.873 回答
1

乍一看,您正在创建大小为 1 的数组(new int[1]等),然后尝试在 for 循环中访问索引 0-999。如果您希望一个数组中有 1000 个位置,就像您的 for 循环所要求的那样,那么您应该创建一个数组,例如new int[1000].

于 2012-04-24T02:23:27.377 回答
1

您已初始化name为大小为 1 的数组,但随后您引用name[i],其中i计数最多为 1000。 name[0]有效,但一旦达到name[1],您就会得到异常。

您应该初始化nameString[1000]. 或者(更好)使用 ArrayList,它会随着您向其中添加项目而扩展。

于 2012-04-24T02:24:20.400 回答