Java - 对象数组越界问题

时间:2012-02-22 05:36:02

标签: java

我正在尝试将输入文件中的数据存储到一系列对象中,然后将这些对象存储在数组中。问题是它给了我一条错误信息,说我的数组已经超出界限。

它从文件中获取数据没有问题,但我不知道为什么。

这就是我所拥有的:

public static void main(String[] args) throws IOException
{
    Scanner scan = new Scanner(new File("input.txt"));
    Scanner keyboard = new Scanner(System.in);

    int numItems = scan.nextInt();
    scan.nextLine();


    Books bookObject[] = new Books[numItems];
    Periodicals periodicalObject[] = new Periodicals[numItems];

    for(int i = 0; i < numItems; i++)
    {
        String tempString = scan.nextLine();
        String[] tempArray = tempString.split(",");

        if(tempArray[0].equals("B"))
        {
            char temp = 'B';
            //THIS IS WHERE THE IDE SAYS THE ERROR IS
            bookObject[i] = new Books(temp, tempArray[1],tempArray[2], tempArray[3], tempArray[4], tempArray[5]);
        }
        else if(tempArray[0].equals("P"))
        {
            char temp =  'P';
            periodicalObject[i] = new Periodicals(temp, tempArray[1], tempArray[2], tempArray[3], tempArray[4], tempArray[5]);
        }
    }
}

这是输入:

4
B,C124.S17,The Cat in the Hat,Dr. Seuss,Children’s Literature
P,QJ072.C23.37.4,Computational Linguistics,37,4,Computational Linguistics
P,QJ015.C42.55.2,Communications of the ACM,55,2,Computer Science
B,F380.M1,A Game of Thrones,George R. R. Martin,Fantasy Literature

2 个答案:

答案 0 :(得分:2)

我的猜测是,临时数组中的项目数量少于预期。试试这个。

    if(tempArray[0].equals("B"))
    {
        char temp = 'B';
        //THIS IS WHERE THE IDE SAYS THE ERROR IS
        System.out.println(tempArray.length);
        bookObject[i] = new Books(temp, tempArray[1],tempArray[2], tempArray[3], tempArray[4], tempArray[5]);
    }

它应该告诉你有多少物品。

答案 1 :(得分:1)

考虑这一行 -

B,C124.S17,帽子里的猫,博士。苏斯,儿童文学

这将存储在tempString中。当你这样做

  String[] tempArray = tempString.split(",");

为此,然后

tempArray [0] - &gt;乙

tempArray [1] - &gt; C124.S17

tempArray [2] - &gt;帽子里的猫

tempArray [3] - &gt;苏斯博士

tempArray [4] - &gt;儿童文学

没有tempArray [5]!

因此,当你说

    bookObject[i] = new Books(temp, tempArray[1],tempArray[2], tempArray[3], tempArray[4], tempArray[5]);

它将抛出一个ArrayIndexOutOfBoundsException,因为tempArray的最大数组索引是4而不是5.