2013-05-31 52 views
1

我有一個具有以下數據列表迭代器卡住的Java

1文件^我最恨的就是電話它從來沒有我告訴它做的是緩慢的響應時間s ** T網,並會不斷因爲我會將太多應用程序或視頻加載到手機上,所以我認爲我認爲這是爲媒體驅動的人設計的。如果你不介意你的手機鎖定或不得不出廠重置它每隔幾天去它#

2 ^這個設備是第一個先進的設備,實際上有很多事情要做,它有很小的錯誤和任何智能手機的最佳瀏覽器。在我的手機3G和3GS創新,我們今天做智能手機的方式。#


每行分隔用「#」和每行是相隔一個「^」 我將它們存儲在一個listoflists並打印它們。 代碼(下面給出)正確地打印2行,但在此之後卡住而不退出。我不知道問題出在哪裏。請幫忙。

 FileReader fr=new FileReader("comments.csv"); 
     Scanner sc= new Scanner(fr); 
     sc.useDelimiter("#"); 

     ArrayList<ArrayList<String>> listoflists= new ArrayList<ArrayList<String>>(); 
     ArrayList<String> singlist= new ArrayList<String>(); 

     while(sc.hasNext()) 
     { 
      String line=sc.next(); 
      String[] element=line.split("\\^"); 
      for(int i=0; i< element.length;i++) 
      { 
       singlist.add(element[i]); 
       bw.write(element[i]); 
       bw.newLine(); 
       //System.out.print(element[i]+"\n"); 
      } 
      listoflists.add(singlist); 

     } 
    // it running properly till this part without getting stuck in infinite loop 
     ListIterator<String> iter1=singlist.listIterator(); 
     ListIterator<ArrayList<String>> iter2=listoflists.listIterator(); 
     while(iter2.hasNext()) 
     { 
      while(iter1.hasNext()) 
      { 
       System.out.println(iter1.next()); 
      } 
     } 

感謝

+0

iter2未被轉發;所以iter2.hasNext()將始終爲真。在某處調用iter2.next() – vpram86

+0

使用foreach循環來避免這樣的錯誤:'for(List singleList:listOfLists){for(String s:singleList){...}} –

+0

@ vpram86它工作正常!謝謝,但是如果指針沒有轉發,迭代器如何打印數據的第二行?(因爲我將兩行都作爲輸出):/ – Arun

回答

3

此代碼是無限循環:

while(iter2.hasNext()) 
{ 
    while(iter1.hasNext()) 
    { 
     System.out.println(iter1.next()); 
    } 
} 

因爲你不超過iter2移動,它總是指示第一個項目。

這應該可以解決問題THRE:

while(iter2.hasNext()) 
{ 
    while(iter1.hasNext()) 
    { 
     System.out.println(iter1.next()); 
    } 
    iter2.next(); 
} 
0

你是不是調用iter2.next(),所以它無限迭代。

while(iter2.hasNext()) { 
    while(iter1.hasNext()) { 
     System.out.println(iter1.next()); 
    } 
    iter2.next(); 
} 
2

我想你想要做的是

ListIterator<ArrayList<String>> iter2 = listoflists.listIterator(); 
while(iter2.hasNext()){ 
    List temp = iter2.nextElement(); 
    ListIterator<String> iter1 = temp.listIterator(); 
    while(iter1.hasNext()){ 
     System.out.println(iter1.next()); 
    } 
} 
+0

它的工作!謝謝,但是如果指針沒有轉發,迭代器如何打印數據的第二行?(因爲我將兩行都作爲輸出) – Arun

0

沒有得到你的問題很明顯,

我認爲,如果你想再讀準備好的名單比,應該從listoflist讀singleList

ListIterator<ArrayList<String>> iter2=listoflists.listIterator(); 
    while(iter2.hasNext()) 
    { 
     ListIterator<String> iter1=(ArrayList<String>)iter2.next(); 
     while(iter1.hasNext()) 
     { 
      System.out.println(iter1.next()); 
     }