-1
これは基本的に私自身のカスタムイテレータを作成してArrayListの2番目の番号を印刷しようとしています。私はarraylistに0から100までの整数を設定しました。ArrayListのすべての2番目のメンバを印刷するカスタムイテレータ
しかし、どういうわけか私のカスタムIteratorを使用していないと、私のarrayListのすべての単一のintを奇妙に出力します。
私はこれに間違った方法で近づいていますか? コード:
public class IteratorTesting implements Iterable{
ArrayList<Integer> rand;
public IteratorTesting(){
rand = new ArrayList<>();
}
public ArrayList<Integer> getRand(){
return rand;
}
public int getSize(){
return rand.size();
}
@Override
public Iterator iterator() {
return new MyIterator();
}
public class MyIterator implements Iterator<Object>{
int currentIndex=0;
@Override
public boolean hasNext() {
if(currentIndex<rand.size()){
return true;
}else{
return false;
}
}
@Override
public Object next() {
return rand.get(currentIndex+=2);
}
}
public static void main(String[] args) {
IteratorTesting name = new IteratorTesting();
for (int i = 0; i < 100; i++) {
name.getRand().add(i);
}
Iterator it = name.getRand().iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
出力:
run:
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
しかし、私はIteratorオブジェクトをオーバーライドします。 @Override public Iterator iterator(){ return新しいMyIterator(); } – Frisco
いいえ、あなたはありません。 'IteratorTesting'クラスでオーバーライドしましたが、その内部の' ArrayList'オブジェクトではオーバーライドしていません。 –
name.iterator()代わりに –