2011-05-19 32 views
0

我有以下代碼:迴路的設置

LinkedHashMap<String,ArrayList<String>> h; 
Set set = h.entrySet();  
Iterator i = set.iterator(); 
     while(i.hasNext()) { 
      System.out.println(i.next()); 
      Map.Entry me = (Map.Entry)i.next(); 
      String currentSegString = (String) me.getKey(); 

      System.out.println(currentKey+"**************"); 
     } 

打印出這一點:

1=[] 
2************** 
3=[A, B, C] 
4************** 
5=[] 

但後來我刪除一行System.out.println(i.next());

LinkedHashMap<String,ArrayList<String>> h; 
Set set = h.entrySet();  
Iterator i = set.iterator(); 
     while(i.hasNext()) { 

      Map.Entry me = (Map.Entry)i.next(); 
      String currentSegString = (String) me.getKey(); 

      System.out.println(currentKey+"**************"); 
     } 

而且它打印出來這個:

1************** 
2************** 
3************** 
4************** 
5************** 

爲什麼不在每個鍵的第一種情況下打印**************

回答

6

這是因爲當你這樣做:

System.out.println(i.next()); 

你跳到下一行,然後Map也做.next()

爲此你只看到2出可能的5行。

說明:

 while(i.hasNext()) { 
     System.out.println(i.next()); //skip one #1, #3, #5 
     Map.Entry me = (Map.Entry)i.next(); //goto next one #2, #4 
     String currentSegString = (String) me.getKey(); 

     System.out.println(currentKey+"**************"); //output #2,4 
    } 

二碼:

while(i.hasNext()) { 

     Map.Entry me = (Map.Entry)i.next(); //goto next one #1, #2, #3, #4, #5 
     String currentSegString = (String) me.getKey(); 

     System.out.println(currentKey+"**************"); //output #1,2,3,4,5 
    } 

解決的一種方式,這將是:

while(i.hasNext()) { 
     Object temp = i.next(); //goto next one #1, #2, #3, #4, #5 
     System.out.println(temp); 
     Map.Entry me = (Map.Entry)temp; 
     String currentSegString = (String) me.getKey(); 

     System.out.println(currentKey+"**************"); //output #1,2,3,4,5 
    } 
+0

@Neal:如何在不跳過該行的情況下打印出我的內容?所以我想實際看到'1 = []'? – Prostak 2011-05-19 21:31:55

+0

@Prostak,看我的更新 – Neal 2011-05-19 21:32:11

+0

@Neal:在我的情況下會是什麼「where someType是i.next()是什麼類型」? – Prostak 2011-05-19 21:37:07

2

在第一段代碼,你有兩個呼叫i.next(),這意味着你的循環只會執行比第二段代碼少的次數。

1

這是你的代碼應該是什麼樣子,讓您所需的輸出:

Map.Entry me; 
LinkedHashMap<String,ArrayList<String>> h; 
Set set = h.entrySet();  
Iterator<Map.Entry> i = set.iterator(); 
while(i.hasNext()) 
{ 
    me = i.next(); 
    System.out.println(me); 
    String currentSegString = (String) me.getKey(); 
    System.out.println(currentKey+"**************"); 
} 

這樣,你只能叫i.next();一次。