我想用迭代器來使用我的自定義類,但它不能在使用foreach
的元素上迭代。我該如何處理它?爲什麼我不能在我的課堂上使用foreach?
public class FCSOfOtherClass<Double> {
private int n;
private Double[] a;
public FCSOfOtherClass(int cap) {
a = (Double[]) new Object[cap];
}
public void push(Double dou) {
if (a.length == n) {
this.resize(2 * a.length);
a[n++] = dou;
} else {
a[n++] = dou;
}
}
private void resize(int max) {
Double[] newa = (Double[]) new Object[max];
for (int i = 0; i < n; i++) {
newa[i] = a[i];
a = newa;
}
}
public Boolean isEmpty() {
return n == 0;
}
public Double pop() {
Double dou = a[--n];
a[n] = null;
if (n > 0 && n == a.length/2) {
resize(a.length/2);
}
return dou;
}
public int size() {
return n;
}
public Iterator<Double> iterator() {
return new RAIterator();
}
private class RAIterator implements Iterator<Double> {
private int i = n;
@Override
public boolean hasNext() {
return i > 0;
}
@Override
public Double next() {
return a[--i];
}
@Override
public void remove() {
}
@Override
public void forEachRemaining(Consumer<? super Double> action) {
}
這是我的主要方法:
public static void main(String[] args) {
FCSOfOtherClass<Integer> fcs = new FCSOfOtherClass<>(100);
int i = 0;
while (!StdIn.isEmpty()) {
fcs.push(++i);
}
for (int j:fcs) {
StdOut.print(j);
}
}
當我運行它,我得到一個錯誤,告訴我,foreach
並不適用於我喜歡的類型。
一個類必須實現Iterable接口才能在for-each塊中使用。 –
不相關,但不要將通用類型參數命名爲「Double」。它非常容易混淆,看到的類型爲'Double',它不是'java.lang.Double',但可以是任何東西,例如'Fruit'。 [命名約定](https://stackoverflow.com/documentation/java/2697/oracle-official-code-standard/9031/naming-conventions#t=201707061649005848894)對於類型變量通常使用單個大寫字母,最常見的是'T'。在你的情況下,「元素」的「E」是另一個合適的名字。 – Andreas