2016-04-22 8 views
0

内部クラスをイテレータとして使用するテキストブックでは、というメソッドはちょうどを返します。currentcurrent indexです。しかし、サイズが3でインデックスが2の場合は、次の値はありません。理由はありません。< size - 1Javaの内部クラスにhasNextメソッドを埋め込む

+0

長さが1の配列がある場合、有効なインデックスは1つだけです(それは '1'ではありません)。 –

答えて

1

あなたが参照しているイテレーターの実装がわかりませんが、以下のようなものです:

public boolean hasNext() {   
    return cursor != size; //cursor is the index of next element to be fetched 
} 

だから、あなたは私を参照している実装はcurrentが実際に次のフェッチする要素を指し、と信じています。

Size : 3 
current : 2 
condition: 2<3(true) returns true and next() gets you the list.get(current) 


Size:3 
current :3 
Condition : 3<3(fail) you don't have anymore element to iterate as you reached to the end. 
0

おそらくそれはまだインデックスcurrentで値を与えられていないので:

はあなたの例を取ることができます。 hasNext関数は、Iteratorから出てくるものが残っているかどうかを伝えます。たとえば、あなたがこのような何かをするだろうイテレータのすべての内容を印刷したい場合:

public boolean hasNext() { 
    return current < this.size; 
} 
public T next() { 
    return this.array[current]; 
    current++; 
} 
1

によって異なります。機能hasNextnextのようなもののように定義されるだろう

while (iterator.hasNext()) { 
    System.out.print(iterator.next()); 
} 

あなたはnextの方法でやっていることに。 ArrayList.Itrのコードを確認してください。ここでは説明したシナリオを実施する1つの方法は、(これは実装をArrayList.Itrに似ている)である、

  • currentは当初nextが呼び出されると、currentの現在の値が変数に保存されている0
  • を指し、例えば、icurrentがインクリメントされます。
  • インデックスiの値が返されます。

上記の場合、currentの値が3の場合、これ以上の要素はありません。論理は正しい。イテレータは、current<sizeの長さの要素を持ちます。

関連する問題