【问题标题】:Array Index Out of Bounds Error While Populating From a Text File从文本文件填充时数组索引越界错误
【发布时间】:2016-04-24 23:49:48
【问题描述】:

我在尝试从文本文件填充数组时遇到此错误。我认为这可能与我的if 循环有关,但我真的不确定。它给了我myData[9] 的越界错误。我要做的是检查第一个字母是否是D(意味着下面的东西是更新),然后制作一个更新对象。我的update.txt 文件中只有 10 个东西可以填充myData,这就是为什么我很困惑为什么myData[9] 给了我一个越界错误(特别是我尝试将它设置为等于@987654327 @)。

scan = new Scanner(file);
while (scan.hasNext())
{
    String str = scan.nextLine();
    String[] myData = str.split("#");
    if (myData[0].equalsIgnoreCase("D"))
    {
        recordType = myData[0];
        actionCode = myData[1];
        boxID = Integer.parseInt(myData[2]);
        movieID = Integer.parseInt(myData[3]);
        movieTitle = myData[4];
        movieGenre = myData[5];
        releaseYear = myData[6];
        inStock = myData[7];
        totalRentals = Integer.parseInt(myData[8]);
        lastThirty = Integer.parseInt(myData[9]);
        updates[count] = new UpdateRecord(recordType, actionCode, boxID, movieID, movieTitle, movieGenre, releaseYear, inStock, totalRentals, lastThirty);
        count++;
    }

文件内容如下:

 H#Title Town Video Mart Updates#04\24\2016
 D#A#4#5#Harry Potter#Action#2001#True#50#5
 D#A#4#5#Shutter Island#Suspense#2001#True#50#5
 D#A#4#5#The Blind Side#Drama#2001#True#50#5
 D#A#4#5#Borat#Comedy#2001#True#50#5
 D#A#4#5#Bad GrandPa#Comedy#2001#True#50#5
 T#Title Town Video Mart Updates#04\24\2016#5

【问题讨论】:

  • 您的数组在索引 9 中似乎没有对象。向我们展示您的文件。
  • 您的任一行少于 10 个项目,或者文件的行数超出了 updates 数组可以容纳的数量(您可能希望将其设为 List 而不是固定大小的数组) .如果您在代码中指出错误发生在哪一行会更容易。
  • 它出现在上面摘录的第 17 行。更新对象数组的大小为 200,文件中只有 5 个更新,所以这应该不是问题。我只是仔细检查了 txt 文件,每次更新都有 10 项,更新构造函数有 10 项,我正在向其中传递 10 项。

标签: java arrays file


【解决方案1】:

这取决于txt的编写方式,但String[] myData = str.split("#");可能只返回一个长9的数组,因此访问第10个元素会导致错误。

例如,考虑“boo#and#foo”应该返回一个字符串[3]。您的 txt 功能应该返回一个字符串 [10]。

尝试修改txt添加另一个'#',看看是否有效,或者在调试中更好地查看数组的内容。

【讨论】:

  • 我编辑了主帖以包含文本文件数据。带有“d”的行似乎格式正确,我的更新构造函数包含 10 个要传入的项目
  • 是的,您发布的行似乎是正确的。如果您可以在调试中看到发生了什么,那么应该很容易发现哪里出了问题。甚至插入一些 System.out.println 数组元素应该会提供一些有用的见解。
  • 我不熟悉如何在 netBeans 中使用调试器,每次我用一个变量填充 myData 时我都做了一个 println,它似乎跳过了 movieTitle,然后抛出了一个越界最后一个索引。
  • 您可以做的另一项测试是创建一个只有一个简单的“D”行的新 txt 并尝试使用它的程序
  • 原来 netbeans 中的文本编辑器实际上并没有更改文件。之后我使用编辑器添加了电影标题,但它显然没有更改实际文件。
猜你喜欢
  • 1970-01-01
  • 2017-07-26
  • 2014-06-06
  • 2015-03-22
  • 2013-07-27
  • 2013-10-13
相关资源
最近更新 更多