-1

我正在尝试编写一个通过写入文本文件来模拟数据库的程序。我可以读取一个包含要使用的数据的文本文件,然后将其转换为字节数组以存储到另一个文本文件中。我遇到的问题是,当我从字符串转换为字节数组时,我不断收到 java.lang.ArrayIndexOutOfBoundsException:8。我将值硬编码到我的 for 循环中,因此它不应该是无效的索引数组,但似乎没有什么可以解决问题。这是我显示错误的函数:

public void writeBucket(int bucket, String importFile, String[][] allrecords)
{

  theDisk = new FakeDisk();

  for(int z = 0; z < bucket; z++)
  {

    try
     {

      for(int j = 0; j < 7; z++)//for(int j = 0; j < allrecords[z].length; z++)
      {

        if(allrecords[z][j] == null) //this is the line where the error shows up
        {
          continue;
        }

        theDisk.writeSector(z, allrecords[z][j].getBytes());
      }
     }
     catch(Exception e)
     {
         //System.out.println(e.getMessage());//this prints the number 8 when not commented out
       continue;
     }

  }

  try
  {

    FileWriter fwrite = new FileWriter(importFile);

    fwrite.write("\n\n\n\n");
    fwrite.close();

  }
  catch (Exception e)
  {
    System.err.println("Error: " + e.getMessage());
  }

}

我将循环放在 try/catch 中,认为它至少仍会将字节输出到我的文本文件,然后一旦遇到无效索引就不再向文件添加任何内容,但事实并非如此。我主要无法弄清楚为什么我不断收到此错误。我可以毫无问题地打印出数组,如果我不尝试将其写入文本文件,一切都会显示出来。

任何帮助表示赞赏!

4

4 回答 4

5

这就是问题:

for(int j = 0; j < 7; z++)

查看循环初始化和循环条件,两者都使用j- 然后查看增量,它正在改变 的值z

即使是注释掉的版本仍然被破坏,因为它仍在递增z

事实上,j据我所知,你根本不需要。您可以将内部循环更改为:

for (String text : allrecords[z])
{
    if (text == null)
    {
        continue;
    }
    theDisk.writeSector(z, text.getBytes());
}

但是,我强烈建议您一开始就不要在getBytes()没有编码的情况下打电话。如果您真的想要默认平台编码,请明确指定。如果您想要一些其他编码,例如 UTF-8,请指定它。如果你不知道你想要什么编码,你需要退后一步,仔细考虑你的数据。

writeSector(您每次调用的值都相同,这也有点奇怪z……这不会覆盖数据吗?)

于 2012-10-16T06:20:37.413 回答
1

你有答案,你可以使用注释循环(而不是z++, 使用j++):

for(int j = 0; j < 7; z++)  //for(int j = 0; j < allrecords[z].length; j++)
于 2012-10-16T06:19:45.290 回答
1

在内循环中,应该是 j++,而不是 z++:

for(int j = 0; j < 7; j++)
于 2012-10-16T06:21:33.570 回答
-1

试试这个,这样你就不会得到ArrayIndexOutOfBoundException. 如果是2d 数组,.length 将给出第一个索引的长度。并将allrecords[z].length给出第二个索引的长度。

for(int z = 0; z < allrecords.length; z++)


for(int j = 0; j < allrecords[z].length; z++)
于 2012-10-16T06:22:10.233 回答