2013-04-18 38 views
0

我是java的初学者,我目前在工作节点。我想知道是否有一种方法可以显示列表的内容而不必使用.getNext方法,因为一旦我使用它,它就会删除节点上的元素,从字面上删除顶部的节点。我在这段代码中试图做的是使用输入将两个String元素存储在新的两个节点中,然后使用方法proveTitle来证明这些元素在列表中。一旦我这样做,我确保元素仍然完好无损,并使用toString方法来检查列表。 请注意,在Book的某些奇怪的原因类 T不显示除了类和实施的类,如果我把<>围绕它。显示LinkedStack的内容而不删除它们

继承人的代码:

MYNODE类:

public class myNode<T> 
{ 

private T data; 
private myNode next; 

public myNode(T _data) 
{ 
data = _data; 
} 
public myNode(T _data, myNode _next) 
{ 
data = _data; 
next = _next; 
} 

public T getData() 
{ 
return data;  
} 

public void setData(T _data) 
{ 
data = _data;  
} 

public myNode getNext() 
{ 

return next;  
} 

public void setNext(myNode _next) 
{ 
next = _next; 
} 

} 

接口类:

public interface myInterface<T> 
{ 
    public void pushTitle(T data); 
    public T pop(); 
    public T peek(); 
    public String toString(); 
    public boolean isEmpty(); 
    public int size(); 
    public myNode getNode(); 
} 

Book类,其中包含的方法

公共类图书实现MyInterface的

{ 
private int count; 
private T author; 
private T title; 
private int stock; 

private myNode<T> top; 

public Book() 
{ 
    count = 0; 
    top = null; 
} 

@Override 
public myNode getNode() 
{ 
return top; 
} 


@Override 
public void pushTitle(T title) 
{ 
myNode<T> current = new myNode<>(title, top); 
current.setNext(top); 
top = current; 
count++; 
} 

public void proveTitle(T title) 
{ 
    T result; 

    myNode<T> current = top; 

    if(title.equals(current.getData())) 
    { 
    result = current.getData(); 
    System.out.println("The title " + "'" + result + "'" + " exist."); 
    top = top.getNext(); 



} 
} 

@Override 
public T pop() 
{ 
T result; 
if(count == 0 || top == null) 
{ 
    System.out.println("List is empty"); 
} 
System.out.println("The element on top is:" + top.getData()); 
result = top.getData(); 
top = top.getNext(); 

count--; 
return result; 

} 
@Override 

public T peek() 
{ 
    System.out.println("Element on top is: " + top.getData()); 
    return top.getData(); 
} 
@Override 
public boolean isEmpty() 
{ 
    if(top == null) 
    { 
    System.out.println("The list is empty"); 
    } 
    else 
    { 
     System.out.println("The list is not empty." + "It has" + count + "elements");  
    } 

    return top == null; 
} 
@Override 
public int size() 
{ 
    System.out.println("The size of the list is" + count); 
return count;  
} 
@Override 
public String toString() 
{ 
    String result = ""; 
    myNode current = top; 
    System.out.println("Top"); 
    while(current != null) 
    { 
    result += ("[" + current.getData() + "]\n"); 
    current = current.getNext(); 
    } 
    return result + "Bottom"; 
} 

} 

主类:

package node; 
import java.util.Scanner; 

public class myDriver 
{ 
    public static void main(String[]args) 
    { 
    Scanner input = new Scanner(System.in); 

    Book<String> title = new Book<>(); 



    myNode<String> current; 
    current = title.getNode(); 
    String push; 
    String push2; 

    System.out.println("Enter title of book 1"); 
    push = input.nextLine(); 
    title.pushTitle(push); 

    System.out.println("Enter title of book 2"); 
    push2 = input.nextLine(); 
    title.pushTitle(push2); 

    title.proveTitle(push); 
    title.proveTitle(push2); 


    System.out.println(title.toString()); 






} 
} 

输出:

run: 
Enter title of book 1 
Tiger 
Enter title of book 2 
crossed 
The title 'crossed' exist. 
Top 
[Tiger] 
Bottom 
BUILD SUCCESSFUL (total time: 7 seconds) 
+1

1)为了更好地提供帮助,请发布[SSCCE](http://sscce.org/)。 2)对代码块使用一致的逻辑缩进。代码的缩进旨在帮助人们理解程序流程! –

+0

谢谢先生。我会记住这一点。 –

回答

0

你似乎尝试使用Stack实现List。这些是非常不同的数据结构。你在List上试图做的事情非常简单。在Stack它需要你有第二个堆栈。当你从当前堆栈中弹出每个对象时,将它推入第二个堆栈。

如果订单无关紧要,您可以做一次并切换到使用第二个堆栈。如果订单确实重要,您将不得不改变流程以取回原始堆栈。

另请注意,更好的方法可能只是使用List

+0

我看不出它的力量。谢谢。 –

相关问题