2015-10-30 2 views
0

У меня есть этот кусок кода:Foreach ошибка синтаксиса цикла

private V[] elements; 

public int size(){ 
    int returnValue = 0; 
    for(TableEntry<K,V> pointer : elements){ 
    while(pointer != null){ 
     returnValue++; 
     pointer = pointer.next; 
    } 
    } 
    return returnValue; 
} 

И я получаю ошибку:

Type mismatch: cannot convert from element type V to SimpleHashtable.TableEntry in foreach line.

Вот полный класс: Code

+2

элементов является массивом 'V', а не массив' 'TableEntry ... – assylias

+0

Является ли TableEntry некоторые подкласс хэш-таблицы? – Gacci

+0

Ваша проблема не в цикле for, а в том, как вы смешиваете и отливаете между V и TableEntry в своем коде. Вам нужно выбрать тот или иной ... – assylias

ответ

4

Вы пытаетесь получить TableEntry объекты из массива V (elements). Это не будет работать.

Кроме того, ваша петля двойная, для каждой записи в массиве вы пытаетесь выполнить поиск по остальной части массива.

Попробуйте вместо этого:

public int size() { 
    int returnValue = 0; 
    for (V pointer : elements) 
     if (pointer != null) { 
      returnValue++; 
     } 
    return returnValue; 
} 
0

Изменить тип переменной указателя на V.

for (V pointer : elements) { 
    \\ loop body 
} 
+1

'V' не нужно реализовывать' Iterable', он выполняет итерацию по массиву не над 'V'. См. [JLS 14.14.2] (https://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.14.2). – Tomas

+0

О, да! пропустил '[]', спасибо :) –

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