2016-08-20 4 views
0

javaのArrayListからのデータの表示に単一のIterator参照を使用する方法ここJavaのArrayListからデータを表示するための単一のIterator参照の使用方法

は、すべての

String names="Nachan,Ram,Ganesh,Kumar,Prasanna"; 
    ArrayList<String> list=new ArrayList<String>(); 

    String[] nameList=names.split(","); 
    for(int i=0; i<nameList.length-1; i++) 
     list.add(nameList[i]); 

    Iterator<String> nameitr=list.iterator(); 
    while(nameitr.hasNext()) 
     System.out.println(nameitr.next()); 

    while(nameitr.hasNext()) //here error occurs 
     System.out.println(itrall.next()); 

/* why here i can't use the same or another iterator reference for the particular list */ 
+0

まず、存在しない変数 'itrall'への参照のため、プログラムはコンパイルされません。第2に、 'ここでエラーが発生しました 'と表示された行はエラーを表示しません。hasNext()は既に前のループのリスト全体を反復しているので' false'を返します。あなたに与える要素、それを再利用できない理由。 –

+0

Andrew Lyginさんありがとうございます。ですから、イテレータを使用してインデックスを開始する方法は他にありません –

+0

同じリストに別のイテレータを作成する必要があります。 –

答えて

0

以下の文が実行される、イテレータnameitrはArrayListオブジェクトlistの上に作成されます。

Iterator<String> nameitr=list.iterator(); 

我々はnameitr.next()を行う際に、nameitrが第一の要素またはArrayListのを指しています。同様に、ループはnameitr.hasNext()がfalseになるまで実行されます。これは、nameitrが最後の要素またはArraylistを指していることを意味し、Arraylistにはそれ以上の要素が残っていません。

nameitrが既にArraylistの最後の要素を指しているので、以下のコード行はfalseを返します。

while(nameitr.hasNext()) //here error occurs

はこれを避けるために、我々は、ArrayListの

Iterator new_nameitr2=list.iterator();

の上に新しいイテレータを作成する必要があるか、私たちは以下のように再初期化既存のイテレータする必要があるので、イテレータnameitrますArraylistの0番目の要素を指すようにしてください。以下の文が実行される

nameitr=list.iterator();

+0

@S McCrohanとMr.Vijay.gvありがとうございます。 **再初期化**は、同じ参照を使用する最善の方法の1つです。 –

0

まず、私のコードで、あなたは最後の要素を取得することはできません。あなたは等号を置くべきです。

for(int i=0; i<=nameList.length-1; i++) 
    list.add(nameList[i]); 

第2に、最初のイテレータが終了に達したときに別のイテレータを使用する必要があります。 あなたはこれを行うことができます。

Iterator<String> nameitr=list.iterator(); 
while(nameitr.hasNext()) 
    System.out.println(nameitr.next()); 

Iterator<String> nameitr1=list.iterator(); 
while(nameitr1.hasNext()) 
    System.out.println(nameitr1.next()); 
+0

ありがとうございます。これは働いています –

0

は、イテレータnameitrは、ArrayListオブジェクト「リスト」の上に作成されます。 イテレータnameitr = list.iterator(); nameitr.next()を実行すると、nameitrは最初の要素またはArrayListを指します。同様に、ループはnameitr.hasNext()がfalseになるまで実行されます。それはnameitrが最後の要素またはArraylistを指していることを意味し、Arraylistにはもう要素が残っていません。 nameitrがすでにArraylistの最後の要素を指しているので、以下のコード行はfalseを返します。
しばらくは(nameitr.hasNextは())//ここでエラーがこれを避けるために

を発生し、我々は、ArrayListのイテレータ

new_nameitr2=list.iterator(); 

の上に新しいイテレータを作成する必要があるか、我々は、既存を再初期化する必要がありますiterator nameitrがArraylistの0番目の要素を指すように、以下のように繰り返します。 nameitr = list.iterator();

+0

ありがとうございますvijay.gv –

関連する問題