2016-03-24 104 views
0

我嘗試加入生菜和雞肉之間pickels在我的鏈表,並打印出最終產品應該是:的LinkedList使用迭代器

Bread1,芥菜,生菜,pickels,雞肉,番茄,Bread2,結束.. 。

但是,程序只打印出:芥末,雞肉,Bread2,結束...

能有人向我解釋這個錯誤嗎?

public class LinkedList 
{ 
    public static void main(String[] args) 
    { 

    List<String> myLinkedList = new LinkedList<String>(); 

    String strOutput=""; 

    myLinkedList.add("Bread1"); 
    myLinkedList.add("mustard"); 
    myLinkedList.add("lettuce"); 
    myLinkedList.add("chicken"); 
    myLinkedList.add("tomato"); 
    myLinkedList.add("Bread2"); 

    ListIterator<String> lit = myLinkedList.listIterator(); 

    while (lit.hasNext()) 
    { 
     String str = lit.next(); 
     if (myLinkedList.equals("lettuce")) 
     { 
     lit.add("pickels"); 
     } 
     strOutput += (lit.next().toString() + ",") ; 
    } 
    strOutput += ("end...\n"); 
    } 
} 
+3

'lit.next()。toString()'爲什麼第二次調用'#next'? 'if(myLinkedList.equals(「lettuce」))'你也可以寫'if(false)',所以請考慮你在那裏做什麼。 – Tom

回答

0

你有兩個錯誤,並且都與缺乏使用str變量:

while (lit.hasNext()) 
{ 
    String str = lit.next(); 
    if (str.equals("lettuce")) // <-- Use str, not myLinkedList 
    { 
    lit.add("pickels"); 
    } 
    strOutput += (str + ",") ; // <-- Use str, not lit.next() 
} 

注意pickels不會被Listiterator返回。參見add()的javadoc:

將指定的元素插入列表(可選操作)。 該元素緊接在next()返回的元素之前,如果有,則返回previous()(如果有)將返回的元素之前。 (如果列表不包含元素,則新元素將成爲列表中的唯一元素。)新元素插入隱式遊標之前:對next的後續調用將不受影響,並且隨後調用previous將返回新元素。 (由一個該調用的增加,將通過調用返回到nextIndexpreviousIndex值)。

0

如果你想在一個列表中添加一些值,你應該使用add(index,object)方法。

List<String> list = new ArrayList<String>(Arrays.asList("Apple", "Banana", "Cherry")); 
int index = list.indexOf("Banana"); //indexOf() to find the position of Banana 
list.add(index, "Blueberry"); // insert Blueberry before Banana 
System.out.println(list); //Apple, Blueberry, Banana, Cherry 

您在一次迭代中調用next()兩次。每次調用next()時,它都會給出迭代的下一個對象(在本例中爲String)。因此,將next()值存儲在適當的變量中,並在需要時使用。

0

這應該完全做你需要的:)。希望能幫助到你!

import java.util.LinkedList; 
import java.util.List; 

public class Program 
{ 
public static void main(String[] args) 
{ 

List<String> myLinkedList = new LinkedList<String>(); 

myLinkedList.add("Bread1"); 
myLinkedList.add("mustard"); 
myLinkedList.add("lettuce"); 
myLinkedList.add("chicken"); 
myLinkedList.add("tomato"); 
myLinkedList.add("Bread2"); 

int index = myLinkedList.indexOf("lettuce"); 
myLinkedList.add(index + 1, "pickels"); 
for(String strOutput: myLinkedList){ 
     System.out.print(strOutput + ","); 
} 
} 
}