gpt4 book ai didi

java - 在包含私有(private)集合的类上使用迭代器时出现错误 "Can only iterate over an array or an instance of java.lang.Iterable"

转载 作者:行者123 更新时间:2023-12-02 03:45:37 24 4
gpt4 key购买 nike

我想在一个类上使用迭代器,该类具有一个集合(由我定义为字典),我在该集合上实现了迭代器。我能怎么做?当我必须执行 for-each 循环时,是否必须回调类的私有(private)字段?下面是集合类的代码:

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;
}

}

这是使用集合作为私有(private)字段的类的一部分:

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();

但它给了我错误:

Can only iterate over an array or an instance of java.lang.Iterable

我该如何解决这个问题?任何帮助将不胜感激

最佳答案

添加implements Iterable<SomeType>BibliotecaAbs 的类声明,并实现所需的方法public Iterator<SomeType> iterator() .

关于java - 在包含私有(private)集合的类上使用迭代器时出现错误 "Can only iterate over an array or an instance of java.lang.Iterable",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36338415/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com