我正在使用Java進行數據挖掘項目,並且遇到了ArrayList的奇怪問題。ArrayList訪問應該刪除的元素
ArrayList(availAttribs)包含尚未在決策樹的當前分支中使用的所有屬性的名稱。在循環開始時選擇一個屬性,並將ArrayList中該屬性的索引存儲在chosenAttribute中。執行該邏輯,然後將項目從列表中移除並選擇另一個。
該程序沒有按預期運行,所以我在每個循環中使用a來顯示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循環檢查退出條件內。我認爲如果一個項目沒有成功刪除,當我遍歷列表並打印每個元素時,它會顯示出來,但顯然它仍然可以訪問它們。
編輯: 隨機被宣佈爲while循環外:
Random random = new Random(System.currentTimeMillis());
你能展示如何宣佈隨機? – 2011-02-10 22:29:43
什麼是trainSet?您只需修改availAttribs,但顯示trainSet的內容。他們耦合? – 2011-02-10 22:37:52