Я использую Java для проекта интеллектуального анализа данных, и у меня возникла странная проблема с ArrayList.
ArrayList (vendAttribs) содержит имена всех атрибутов, еще не использованных в текущей ветви дерева решений. В начале цикла выбирается атрибут, и индекс этого атрибута в ArrayList сохраняется в selectedAttribute. Логика выполняется, затем элемент удаляется из списка и выбирается другой.
Программа работала не так, как ожидалось, поэтому я использовал для каждого цикла отображение текущего содержимого ArrayList перед каждым выбором атрибута, чтобы я мог проверить его содержимое.
Вот что я получил:
availAttribs contains ...
-Color
-size
-act
-age
Chose attribute #1: size
availAttribs contains ...
-Color
-act
-age
Chose attribute #1: size
Атрибуты выбираются случайным образом:
for(String s : availAttribs) {
System.out.println(" -" + s);
}
chosenAttribute = random.nextInt(availAttribs.size() - 1);
System.out.println(" Chose attribute #" + chosenAttribute + ": " +
trainSet.attribute(chosenAttribute).name());
// other stuff here
availAttribs.remove(chosenAttribute);
Все это в цикле while, проверяющем условие выхода. Я бы подумал, что если элемент не был успешно удален, он будет отображаться, когда я перебираю список и распечатываю каждый элемент, но, очевидно, он все еще может получить к ним доступ.
Edit:
Случайное было объявлено вне цикла while:
Random random = new Random(System.currentTimeMillis() );