gpt4 book ai didi

java - 测验程序中数组索引越界异常

转载 作者:行者123 更新时间:2023-12-01 14:59:43 28 4
gpt4 key购买 nike

我在尝试修复 ArrayIndexOutOfBoundsException 时遇到了最困难的时间.

我有一个从文件中逐行读取的方法。如果该行上的名称和 ID 与我传递给该方法的某些变量匹配,则将该行保存到数组中。

该程序模拟测验。用户不能使用相同的名称和ID超过2次;因此,该文件仅包含 2 行具有相同名称和 id 的行。

我创建了一个名为 temp 的数组来保存文件中的这两行。如果文件为空,则用户会尝试两次,当他再次尝试时,他会被拒绝。因此,如果您输入不同的名称和 ID,您应该再尝试 2 次。此时,该文件有前一个用户的两行,但是当新用户尝试时,他只能测试一次。当他第二次尝试时,我得到了数组越界异常。

我的问题是:数组 temp 是否保存了以前的值,这就是我收到异常的原因吗?

private String readFile(String id, String name) {
String[] temp = new String[3];
int i = 1;
int index = 0;
String[] split = null;
String idCheck = null;
String nameCheck = null;
temp = null;

try {
BufferedReader read = new BufferedReader(new FileReader("studentInfo.txt"));
String line = null;

try {
while ((line = read.readLine()) != null) {
try {
split = line.split("\t\t");
} catch (Exception ex) {
}

nameCheck = split[0];
idCheck = split[1];

if (idCheck.equals(id) && nameCheck.equals(name)) {
temp[index] = line;
}

index++;
}
read.close();
} catch (IOException ex) {
}
} catch (FileNotFoundException ex) {
}

if (temp != null) {
if (temp[1] == null) {
return temp[0];
}
if (temp[1] != null && temp[2] == null) {
return temp[1];
}
if (temp[2] != null) {
return temp[2];
}
}

return null;
}

最佳答案

我看到两个地方可以得到索引越界异常。首先是这段代码:

try {
split = line.split("\t\t");
} catch (Exception ex) {
}
nameCheck = split[0];
idCheck = split[1];

如果该行没有 "\t\t"序列,然后split将只有一个元素并尝试访问 split[1]会抛出异常。 (顺便说一句:你不应该默默地忽略异常!)

第二个(更可能是问题的根源)是您正在递增 index对于具有匹配 id 和名称的每一行,因此一旦您阅读了第三行,index作为 temp 的下标超出范围.

您可以包含 index < temp.length在你的while循环条件,或者您可以使用 ArrayList<String>对于 temp而不是String[] 。这样您就可以添加无限数量的字符串。

关于java - 测验程序中数组索引越界异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13847163/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com