2014-01-17 40 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是集合的优化提示,它不会改变集合的使用情况。随着您添加元素,系列会自动增加,并且容量会增加。因此,使用更高容量进行初始化将需要更少的扩展和更少的内存分配。

相关问题