2014-01-17 2 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

Емкость является общее количество элементов, которые вы могли магазин. Размер - это количество элементов, которые вы фактически сохранили.

В коде нет ничего хранится в векторе, так что вы получите IndexOutOfBoundsException при попытке получить доступ к элементу 0.

+0

Забавно, как никто не смог прочитать код, но они знали, что это правильный ответ. Спасибо, похоже, я использовал set вместо add. – Shmoopy

+0

Это было переиздано, если вы открыли изображение в другом окне. – Christian

+0

@Shmoopy К сожалению вопрос о downvotes иногда броский. –

0

Использования set(int, object) для изменения EXISTING элемента. Используйте add(int, object), чтобы добавить NEW элемент.

Это объясняется в javadoc для Vector s. elementCount должно быть 0 (оно пусто), а capacityIncrement по умолчанию равно 0 и имеет значение только в том случае, если вы перейдете к указанному вами пределу (2).

0

Необходимо заполнить Vector значениями null, чтобы сделать его размер равным емкости. Емкость - это подсказка для оптимизации коллекции, она не меняет использование коллекции. Коллекция будет автоматически расти по мере добавления к ней элементов, а емкость увеличится. Таким образом, инициализация с более высокой пропускной способностью потребует меньших расширений и меньшего объема памяти.

Смежные вопросы