数据没有添加到链表中并正确显示.为什么



我正在创建一个使用GUI形式的链表存储数据的系统。我在存储和显示链表时遇到了一些问题。看起来在我输入数据之后,它没有存储到链表

我正在做的是一个图书馆系统,所以我需要将图书名称,作者名称,ISBN号和图书副本数量存储到链表中的单个节点中。这些信息来自用户输入,如jTextField1。我的讲师教我如何插入单个数据,但现在我需要插入多个数据。

我在Node类中重新创建了构造函数和getter方法,并在LinkedList类中也进行了更改。但是由于某种原因,数据似乎没有添加到LinkedList中,当我在TextArea中显示列表时,它所显示的都是NULL,而不是我刚刚输入的数据。为什么呢?

这是我的Node类:

public class Node 
{
    String name;
    String author;
    int isbn;
    int number;
    Node next;
    Node()
    {
        name = null;
        author = null;
        isbn = 0;
        number = 0;
        next = null;
    }
    Node(String name, String author, int isbn, int number)
    {
        this.name = name;
        this.author = author;
        this.isbn = isbn;
        this.number = number;
    }
    String getName()
    {
        return name;
    }
    String getAuthor()
    {
        return author;
    }
    int getisbn()
    {
        return isbn;
    }
    int getnumber()
    {
        return number;
    }
    Node getNext()
    {
        return next;   
    }
    void setNext(Node next)
    {
        this.next=next;
    }
}

这是我的链表类:

public class LinkedList
{
    Node node = new Node();
    Node head;
    LinkedList()
    {
        head=null;
    }
    Node getHead()
    {
        return head;
    }
    public void addNode(String name, String author, int isbn, int number)
    {
        Node newNode = new Node(name, author, isbn, number);
        newNode.next = head;
        head = newNode;
        JOptionPane.showMessageDialog(null,"Node added to the list.");
      }
    }
    public String displayNode()
    {
        Node current = head;
        String output = "";
        while(current!= null)
        {
            output+="Book Name: "+current.getName()+" Author: "+current.getAuthor()+" ISBN Number: "+current.getisbn()+" Number of copies: "+current.getnumber();
            current=current.getNext();
        }
        return(output+"NULL");
    }

这就是我在AddBook JFrame:

中的内容
public class AddBook extends javax.swing.JFrame {    
    static String name;
    static String author;
    static int isbn;
    static int number;
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    LinkedList list = new LinkedList();
    list.addNode(jTextField2.getText(), jTextField3.getText(), Integer.parseInt(jTextField4.getText()), Integer.parseInt(jTextField1.getText()));        
}          
}

另一个带有display:

的JFrame
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    LinkedList list = new LinkedList();
    jTextArea1.setText(list.displayNode());
}  

Data类:

public class Data {
    String name;
    String author;
    int isbn;
    int number;
    public Data(String name, String author, int isbn, int number)
    {
    }
}
有谁能帮我吗?谢谢你。

把节点想象成一个可以包含任何数据的桶,而不仅仅是一个简单的数字(正如大多数教程所描述的)。

代替Node类中的int num字段,您可以使用任何您想要的引用类型,例如,List<Integer>:

public class Node  {
    List<Integer> data;
    ...
}

在这种情况下,您还需要重写构造函数和getter(分别通过更改参数类型和返回类型)。

另一个不违反单一责任原则的好解决方案是使用包装器类(例如Data):

class Data {
    private Integer i;
    private String s;
}

最简单的方法是为数据创建一种"box"类,并将其替换为int num;,例如:

public class Box {
    String name;
    String author;
    Box(String name, String author) {
        this.name = name;
        this.author = author;
    }
}

在Node和LinkedList中处理它就像处理int一样,但是插入看起来像这样:

yourList.add(new Box("book", "author"));

如果你想将列表用于不同的类型,你必须学习泛型,例如:https://docs.oracle.com/javase/tutorial/java/generics/index.html

您可以添加额外的属性到您的Node类,如下所示:

    public class Node{
    String bookName, author;
    int isbn, copies;
    Node next;
   ...

现在您可以为每个Node的所有这些属性使用get()和set()方法。

链表的head应该指向顶部元素。因此,在addNode中,您应该修改的是node属性。

public class LinkedList
{
   Node node;
   Node head = new Node();
   LinkedList()
   {
      node = null;
   }
...

此外,添加一个节点应该使前一个节点的next指向创建的新节点,以便将新节点连接到链表的其余部分。

带有null的节点接下来标记为尾部节点,我们将在其中连接新创建的节点。

你可以通过循环遍历列表的节点,直到找到null next,或者通过将尾节点存储为链表的属性。

public class LinkedList
{
   Node node;
   Node head = new Node();
   Node tail; // add tail as attribute
...

public void addNode(int item)
{
    Node newNode = new Node(item, null);
    node = newNode; //head = newNode;
    tail.setNext(newNode); // connects the new node
    tail = newNode; // makes the new node the new tail
    JOptionPane.showMessageDialog(null,"Node added to the list.");
}

相关内容

  • 没有找到相关文章

最新更新