正如您在屏幕截图中看到的那样,new_mean
的容量为0,尽管我已经创建了它,初始容量为2,因此我获得了索引超出范围的异常
有谁知道我做错了什么?
更新:这是代码
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;
}
答案 0 :(得分:5)
容量是可以存储的元素总数。 大小是您实际存储的元素数量。
在您的代码中,Vector中没有存储任何内容,因此当您尝试访问元素0时会出现IndexOutOfBoundsException。
答案 1 :(得分:0)
使用set(int, object)
更改现有元素。使用add(int, object)
添加新元素。
这在Vector
的javadoc中有解释。 elementCount
应为0(它为空),capacityIncrement
默认为0,仅在您超出指定限制(2)时才相关。
答案 2 :(得分:0)
您需要在Vector
填充null
值,使其大小等于容量。容量是集合的优化提示,它不会对集合使用情况进行任何更改。当您向其添加元素时,集合将自动增长,容量将增加。因此,使用更高容量进行初始化将需要更少的扩展和更少的内存分配。