ArrayIndexOutOfBoundsException
을 수정하는 데 가장 힘든 시간을 보내고 있습니다.퀴즈 프로그램에서 배열 인덱스가 범위를 벗어나는 예외
파일에서 한 줄씩 읽는 방법이 있습니다. 행의 이름과 ID가 메소드에 전달하는 일부 변수와 일치하면 그 행을 배열에 저장합니다.
이 프로그램은 퀴즈를 시뮬레이션합니다. 사용자는 동일한 이름과 ID를 두 번 이상 사용할 수 없습니다. 따라서 파일에는 이름과 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;
}
정확한 예외 라인 수를 표시하는 스택 추적이 필요합니다. – jn1kk
여기에 IOOB 예외가 생깁니다 -'idCheck = split [1];'- 라인에 이중 탭이없는 경우. – Jivings
'temp [index] = line;'-> 이것은 문제가있는 것처럼 보입니다.위의'if' 문을 만나는 파일이 3 줄 이상 있다면'ArrayOutOfBoundsException'으로 끝날 것입니다. – Laf