2015-12-08 72 views
0

我看到一个关于链接列表发布的问题,并试图解决它时遇到问题,现在我无法弄清楚。这里有两个类:列表中的节点

  if (part1.equals("add")) 
      { 
       test.addNext(num); 
       while(!test.isEmpty()){ 
       System.out.println(test.pop() + " "); 

       } 

      } 

这里,将设置节点添加到链表

import java.util.List; 
import javax.xml.soap.Node; 


    int count; 

    Set() { 
     front = null; 
     count = 0; 
    } 

    boolean isEmpty() { 
     return front==null; 
    } 



    int pop() { 
     int x = front.x; 
     front = front.next; 
     count--; 
     return x; 
    } 

} 

我似乎无法弄清楚,为什么我不能得到一个列表类当用户输入各种整数时打印。如果我硬编码没有得到用户的输入,像这样:

test.addNext(1); 
test.addNext(7); 
test.addNext(3); 

while(!test.isEmpty()){ 
System.out.println(test.pop() + " "); 
} 

我得到这样的输出:

3 7 1 

为什么我不能得到相同的结果时,我允许用户输入整数?作为该计划目前为,这里是输出的样子:

Enter command: add 1 
1 
Enter command: add 7 
7 
Enter command: add 3 
3 
Enter command: 

当我想输出看起来像这样:

Enter command: add 1 
1 
Enter command: add 7 
7 1 
Enter command: add 3 
3 7 1 
Enter command: 

回答

4

您的代码打印列表修改它:

while(!test.isEmpty()){ 
    System.out.println(test.pop() + " "); 
} 

This 从列表中删除项直到它为空。这意味着每次打印时(每添加一个新项目后),都会立即再次删除该项目。获得用户输入的情况与硬编码值之间的区别在于,您在每个新用户输入之后都会打印,而您只能在硬编码数据的末尾打印。

所以,你会看到同样的问题,如果你没有这样的代码:

test.addNext(1); 
while(!test.isEmpty()){ 
    System.out.println(test.pop() + " "); 
} 

test.addNext(7); 
while(!test.isEmpty()){ 
    System.out.println(test.pop() + " "); 
} 

test.addNext(3); 
while(!test.isEmpty()){ 
    System.out.println(test.pop() + " "); 
} 

而且你会看到问题消失,如果你问用户打印列表之前的所有三个项目。

使用您当前的代码,无法删除列表中的所有节点(不考虑在打印后再次重新添加它们),无法检查它们。我建议编写一个toString方法,它将打印每个节点,并且不会删除任何内容。事情是这样的:

@Override 
public String toString(){ 
    StringBuilder sb = new StringBuilder(); 
    LinkedNode current = front; 
    while(current != null){ 
     sb.append(current.x + " "); //Not an ideal solution, but demonstrates the right idea. 
     current = current.next; 
    } 
    return sb.toString(); 
} 

或者,你可以实现get(int)size()方法(或迭代器),和做一个循环这样的,而不是当前的while循环:

for(int i = 0; i < test.size(); i++){ 
    System.out.println(test.get(i) + " "); 
} 
+0

你会介意解释原因当我硬编码整数没有得到用户输入时,它显示所有添加的数字?我无法理解编码值的区别,而不是从用户那里获取它们。 – sam1319

+1

@ mike1319我已将该部分添加到答案中。基本上,不同的是当你做印刷。在第一种情况下,您将所有三个值读入列表中,然后将其打印出来。在用户输入案例中,您将在添加*每个新项目后打印列表。 – resueman

+1

这现在非常有意义。感谢您花时间向我详细解释这一点。 – sam1319