カスタムクラスをイテレータで使用しようとしていますが、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) {
}
これは私の主な方法である:私はこれを実行すると、私はforeach
が私のタイプには適用されないことを私に言ってエラーが出る
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);
}
}
。
クラスは、for-eachブロックで使用できるように、Iterableインターフェイスを実装する必要があります。 –
無関係ですが、ジェネリック型パラメータの名前を「Double」にしないでください。 'java.lang.Double'ではなく、' Double'型の変数を見るのは非常に混乱します。 'フルーツ'。型変数の場合、[命名規則](https://stackoverflow.com/documentation/java/2697/oracle-official-code-standard/9031/naming-conventions#t=201707061649005848894)は、大文字の大文字、最も一般的には「T」である。あなたの場合、 "element"の 'E 'が別の適切な名前になります。 – Andreas