2016-03-24 59 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 + ","); 
} 
} 
}