配列サイズを変数で宣言すると ArrayIndexOutOfBoundsException が発生しますが、数値で宣言すると発生しません。
static Student[] readFile(String filename) {
.........
LineNumberReader lnr = null;
try {
lnr = new LineNumberReader(new FileReader(new File(filename)));
lnr.skip(Long.MAX_VALUE);
len = lnr.getLineNumber();
lnr.close();
} catch (IOException e1) {
e1.printStackTrace();
}
len--; // discount the first line
len = (len > 40) ? 40 : len;
Student[] s = new Student[len]; <------- replacing len with a number resolves it
try {
f = new BufferedReader(new FileReader(new File(filename)));
while ((line = f.readLine()) != null) {
.........
s[roll] = new Student(SID, marks); <--- Exception thrown here
roll++;
if (roll == 41) {
f.close();
throw new CustomException("41st Student!!");
}
}
f.close();
} catch (IOException e) {
e.printStackTrace();
} catch (CustomException e) {
System.out.println("Too many students in the class!");
}
return s;
}
コンパイラ自体が境界を認識していないのに、コンパイラが境界を超えていると考えている理由を誰かが説明してもらえますか?
ありがとう!