2014-01-17 42 views
-3

正如你在屏幕截圖中看到的,new_mean的容量是0,儘管我已經創建了一個初始容量爲2的容器,因此我得到了索引超出界限的異常。爲什麼我的向量大小爲0?

有誰知道我在做什麼錯?

enter image description here

更新:下面的代碼

private static Vector<Double> get_new_mean(
     Tuple<Set<Vector<Double>>, Vector<Double>> cluster, 
     Vector<Double> v, boolean is_being_added) { 
    Vector<Double> previous_mean = cluster.y; 
    int n = previous_mean.size(), set_size = cluster.x.size(); 
    Vector<Double> new_mean = new Vector<Double>(n); 
    if (is_being_added) { 
     for (int i = 0; i < n; ++i) { 
      double temp = set_size * previous_mean.get(i); 
      double updated_mean = (temp + v.get(i))/(set_size + 1); 
      new_mean.set(i, updated_mean); 
     } 
    } else { 
     if (set_size > 1) { 
      for (int i = 0; i < n; ++i) { 
       double temp = set_size * previous_mean.get(i); 
       double updated_mean = (temp - v.get(i))/(set_size - 1); 
       new_mean.set(i, updated_mean); 
      } 
     } else { 
      new_mean = null; 
     } 
    } 
    return new_mean; 
} 
+6

請發表相關的代碼,不只是它的圖像。 – Christian

+2

請兩分鐘,讓我們拿我們的眼鏡看到這個微觀圖片。請將您的代碼作爲文本發佈。 –

+1

圖片上的文字太小而無法閱讀。郵政編碼 – Naveed

回答

5

容量爲元素,你可能的總數。大小是您實際存儲的元素的數量。

在你的代碼,沒有什麼存儲在矢量,所以當您嘗試訪問元素0

+0

有趣的是,沒有人能夠閱讀代碼,但他們知道這是正確的答案。謝謝,好像我用set而不是add。 – Shmoopy

+0

如果您在另一個窗口中打開圖像,則可以進行修改。 – Christian

+0

@Shmoopy不幸的是問題downvotes有時會吸引人。 –

0

使用set(int, object)改變一個現有元素你會得到一個IndexOutOfBoundsException異常。使用add(int, object)添加一個NEW元素。

這在javadoc中爲Vector s解釋。 elementCount應該是0(它是空的),並且capacityIncrement默認爲0,並且只有在您要超過您指定的限制時才相關(2)。

0

您需要填寫您的Vectornull值,以使其大小等於容量。 Capacity是集合的優化提示,它不會改變集合的使用情況。隨着您添加元素,系列會自動增加,並且容量會增加。因此,使用更高容量進行初始化將需要更少的擴展和更少的內存分配。

相關問題