Кажется, я получаю исключение массива за пределами границ, но проблема в сообщении об ошибке, и мои средства отладки System.out и eclipse сообщают мне противоречивую информацию.
Это мое исключение:
Исключение в теме "главная"
java.lang.IndexOutOfBoundsException:
Индекс: 9, размер: 9
at java.util.ArrayList.RangeCheck (ArrayList.java:547)
at java.util.ArrayList.get (ArrayList.java:322)
на InduceC45.C45 (InduceC45.java:61)
в InduceC45.main (InduceC45.java:15)
Строка 61 в InduceC45:
for(int attLoop = 1; attLoop <= attributes.get(splitAtt); attLoop++){
Это говорит о том, что splitAtt выходит за границы атрибутов ArrayList, достаточно просто.
Итак, я попытался использовать отладчик, и я также попытался поместить некоторые файлы System.out, чтобы попытаться выяснить, что происходит, в основном они дали мне ту же информацию, так что вот
System.out.
System.out.println("splitAtt="+splitAtt);
System.out.println("attributes="+attributes);
System.out.println("attributes="+attributes.get(splitAtt));
Результатом распечатки стало:
splitAtt = 9
attribute = [3, 3, 3, 2,
3, 6, 3, 4, 4, 2]
атрибуты = 2
Я действительно не понимаю, почему я могу ссылаться на него и не получить ошибку, если она не в цикле. Я не думаю, что я делаю что-то хитрое, дайте мне знать, если кто-нибудь может подумать о возможной причине.
На случай, если кто-то захочет получить полный источник ...
http://github.com/Ryuho/CSC466/blob/master/lab3/src/InduceC45.java Строка 61