数组索引越界
问题描述:
我知道有几个关于这个特定错误的帖子,但是这些帖子的答案都没有解决我的问题。基本上我正在读取一个txt文件到列表列表中。它编译没有错误,但是当我运行它时,我得到“ArrayIndexOutOfBoundsException:2”。显然这个问题在第359行是“double tempArea = Double.parseDouble(tokenize [2]);”。我无法看到该行的任何错误,所以我也检查了额外的大括号或分号,但没有找到。我在下面列出了我的代码。任何人都可以看到错误的原因可能是什么?数组索引越界
ArrayList<String>listS = new ArrayList<>();
try
{
BufferedReader bR = new BufferedReader (new FileReader("EssentialsSaleFile.txt"));
String fileRead = bR.readLine();
while(fileRead != null)
{
String[] tokenize = fileRead.split(",");
String tempType = tokenize[0];
String tempAddress = tokenize[1];
double tempArea = Double.parseDouble(tokenize[2]);
int tempNumOfBedrooms = Integer.parseInt(tokenize[3]);
int tempNumOfToilets = Integer.parseInt(tokenize[4]);
int tempNumOfGarages = Integer.parseInt(tokenize[5]);
String tempSellerName = tokenize[6];
String tempSellerPhone = tokenize[7];
String tempSaleOfferDate = tokenize[8];
String tempSaleOfferEndDate = tokenize[9];
double tempAskingAmount = Double.parseDouble(tokenize[10]);
String tempAssignedEmployee = tokenize[11];
double tempSalesCommissionPerc = Double.parseDouble(tokenize[12]);
String tempObj = new String();
listS.add(tempObj);
fileRead = bR.readLine();
}
bR.close();
}
catch(FileNotFoundException ex)
{
JOptionPane.showMessageDialog(null,"File not here.");
}
catch (IOException e)
{
}
答
问题不在于代码本身。 tokensize
数组包含与您行中逗号分隔字符串一样多的元素。
由于访问第三个元素(tokenize[2]
)时出现ArrayIndexOutOfBoundsException
,因此文件中只有一个逗号。
例如: 该行foo,bar
为您提供了只有两个元素的数组["foo","bar"]
。访问tokenize[2]
将导致ArrayIndexOutOfBoundsException
。
答
答案很简单。文件中有一行只包含一个逗号。用逗号分隔这一行返回一个只有两个元素的数组,这使得访问tokenize [2]越界。
首先,你应该检查被检查的行包含什么。 之后,如果标记大小的长度为13,则在分割后添加一个检查,如果不是,则跳过该行或其他适当的操作,如显示消息或记录行。
嗯,你的文本文件中只有两个元素的行?提示:尝试在分割之前记录你分割的行...... –
*显然*'tokenize'只包含2个元素。这就是错误信息告诉你的,这是你必须研究的,在行前设置一个断点并检查'tokenize'和'fileRead'。 – luk2302