コレクションを持つクラスでイテレータを使用したい辞書)を使用して、Iteratorを実装しました。どのようにできるのか? for-eachループを実行する必要がある場合、クラスのプライベートフィールドをコールバックする必要がありますか?ここ は、コレクションクラスのコードです:エラー "プライベートコレクションを含むクラスのイテレータを使用して"配列またはjava.lang.Iterableのインスタンスのみを反復できます "
public class ArrayDict<K, V> implements Dictionary<K, V> {
Coppia<K, V>[] dict = new Coppia[1];
int n = 0;
@Override
public Iterator<K> iterator() {
return new Iterator<K>() {
private int i = 0;
@Override
public boolean hasNext() {
return i < n;
}
@Override
public K next() {
int pos = i;
i++;
return(K) dict[pos].key;
}
};
}
@Override
public void insert(K key, V value) {
if(search(key)==null)
throw new EccezioneChiavePresente("Chiave già presente");
dict[n] = new Coppia<K,V>(key, value);
n++;
if (n == dict.length) {
Coppia<K,V>[] tmp = new Coppia[dict.length * 2];
for (int i = 0; i < n; i++)
tmp[i] = dict[i];
dict = tmp;
}
}
@Override
public void delete(K key) {
if (n == 0)
throw new EccezioneDizionarioVuoto("Dizionario vuoto");
if (search(key) == null)
throw new EccezioneChiaveNonPresente("Chiave non presente");
int i;
for (i = 0; i < n; i++)
if (dict[i].key.equals(key))
break;
for (int j = i; j < n - 1; j++)
dict[j] = dict[j + 1];
n--;
if (n > 0 && n < dict.length/4) {
Coppia<K,V>[] tmp = new Coppia[dict.length/2];
for (i = 0; i < n; i++)
tmp[i] = dict[i];
dict = tmp;
}
}
@Override
public V search(K key) {
if(n==0)
throw new EccezioneDizionarioVuoto("Dizionario vuoto");
for (int i = 0; i < n; i++)
if (dict[i].key.equals(key))
return dict[i].value;
return null;
}
}
そしてここでは、プライベートフィールドとしてコレクションを使用クラスの一部である:
public abstract class BibliotecaAbs {
protected Dictionary<String, Record> volumi;
public boolean bibliotecaVuota() {
try {
volumi.delete("");
} catch (EccezioneDizionarioVuoto e) {
return true;
}
return false;
}
public void addVol(String posizione, Volume volume) {
try {
volumi.insert(posizione, new Record(volume, false));
} catch (EccezioneChiavePresente e) {
throw new EccezioneScaffaleOccupato();
}
}
は、当然のことながら私が得てきましたコンクリートはBibliotecaAbs
になります。 は、私はこのような何かやりたい:
for(Object s : b){
String intpos = s.toString();
をしかし、それは私にエラーをgaves:
Can only iterate over an array or an instance of java.lang.Iterable
は、どのように私はこの問題を解決することができますか?任意の助けがあります