【问题标题】:How do I let the user search from a singly linked list in java如何让用户从java中的单链表中搜索
【发布时间】:2018-12-18 20:40:52
【问题描述】:

我已经完成了将节点从文本文件添加到列表的单链接。我现在试图让用户从链接列表中选择一个节点来签入电影或从文本文件中签出电影。我一直试图解决这个问题很长时间没有成功。任何贡献或帮助将不胜感激!

这是我的搜索功能不完整...

    public void search () 
{
    System.out.print ("Which one would like like to check out: ");
    Scanner check = new Scanner(System.in);
    String usercheck = check.next();


    SinglyLinkedList myList = new SinglyLinkedList();
    Node n = myList.gethead();
    for (int i = 0; i < myList.getSize; i++) 
    {
        if (n.getTitle.equals(usercheck))
        {
            return ("found");
        } else {
            return n;
        }

    n = n.getNext();
    }
}

这是我完成的单链表,供参考搜索功能...

public class SinglyLinkedList
{
    //Implement a Node
    private static class Node
    {
        private String[] actors;
        private String title;
        private String director;
        private String year;
        private int numActors;
        private String status;
        private String userID;
        private String date;

        private Node next;
        public Node(String e, Node n) 
        {
            String[] data = e.split(" ");
            title = data[0];
            director = data[1];
            year = data[2];
            numActors = Integer.parseInt(data[3]);
            actors = new String[numActors];

            int i = 0;

            for (i = 0; i < numActors; i++) 
            {
                actors[i] = data[4 + i];

            }

            status = data[4 + numActors];

            if (status.equals("out"))
            {
                userID = data[5 + numActors];
                date = data[6 + numActors];
            }



            next = n;
        }
        public int getNumActors()
        {
            return numActors;
        }
        public String gettitle() 
        {
            return title;
        }       
        public String[] getActors() 
        {
            return actors;
        }       
        public String getDirector() 
        {
            return director;
        }       
        public String getYear() 
        {
            return year;
        }       
        public String getStatus() 
        {
            return status;
        }       
        public String getUserID() 
        {
            return userID;
        }
        public String getDate() 
        {
            return date;
        }
        public Node getNext() 
        {
            return next;
        }
        public void setNext(Node n) 
        {
            next = n;
        }
    }

    //List Implementation
    private Node head = null;
    private Node tail = null;
    private int size = 0;
    public SinglyLinkedList() 
    {};
    public int getSize() 
    {
        return size;
    }
    public Node getHead()
    {
        return head;
    }
    public boolean isEmpty() 
    {
        return size == 0;
    }
    public String first() 
    {
        if(isEmpty()) 
        {
            return null;
        }
        return head.gettitle();
    }
    public String last() 
    {
        if(isEmpty()) 
        {
            return null;
        }
        return tail.gettitle();
    }
    public void addFirst(String e) 
    {
        head = new Node(e, head);
        if(size == 0) 
        {
            tail = head;
        }
        size++;
        System.out.println("Added head node with " + head.getDirector());
    }
    public void addLast(String e) 
    {
        Node newNode = new Node(e, null);
        if(isEmpty()) 
        {
            head = newNode;
        }else{
            tail.setNext(newNode);
        }
        tail = newNode;
        size++;
        System.out.println("Added tail node with " + tail.getDirector());   
    }
    public String removeFirst() 
    {
        if(isEmpty()) 
        {
            return null;
        }
        String answer = head.gettitle();
        head = head.getNext();
        size--;
        if(size == 0) 
        {
            tail = null;
        }
        System.out.println("Removed head node with " + answer);
        return answer;
    }
}

【问题讨论】:

  • new 返回一个指向对象的指针,而不是一个对象。
  • 不仅搜索不完整,甚至无法编译。它被声明为返回 void 但它确实尝试两次返回,每次返回不同类型的值。现在,遍历列表并搜索值有多难??
  • @SharonBenAsher 这对你来说可能并不难,但我仍在学习如何编程。如果你已经知道怎么做,那么帮助别人有多难??

标签: java linked-list nodes singly-linked-list


【解决方案1】:

您的SinglyLinkedList 实现很好,但您的search() 方法存在一些问题。

每次调用search() 时,都会创建一个new SinglyLinkedList。换句话说,您没有使用之前从文本文件生成的列表。将文件生成的列表作为方法参数传入,或将该列表设为全局变量以访问它。

另外,正如另一位用户评论的那样,您的搜索不会编译:您使用了return ("found"),而您的方法是void。由于您想返回一个值以让用户知道该值已找到,因此您将方法重写为

public String search()

String 告诉 Java 这个方法将返回一个 String,而void 告诉 Java 在完成时不要期望任何值。

【讨论】:

  • 感谢您为我解决这个问题!从我的代码中可以看出,我是编程新手,但我会尝试修复您指出的那些更改。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-20
  • 1970-01-01
  • 1970-01-01
  • 2020-09-20
  • 2015-07-13
  • 1970-01-01
相关资源
最近更新 更多