Java 数据结构输出中未显示的显示

Java 数据结构输出中未显示的显示,java,data-structures,Java,Data Structures,运行此文件时,我只看到以下内容: public class Link { public static void main(String[] args) { LinkList theLinkedList = new LinkList(); theLinkedList.insertFirstRequest(3); theLinkedList.insertFirstRequest(6); theLinkedList.insert

运行此文件时,我只看到以下内容:

public class Link {

    public static void main(String[] args) {
        LinkList theLinkedList = new LinkList();
        theLinkedList.insertFirstRequest(3);
        theLinkedList.insertFirstRequest(6);
        theLinkedList.insertFirstRequest(10);
        theLinkedList.insertFirstRequest(20);

        theLinkedList.display();
    }

    int floorRequested;
    Link next;

    Link(int floorRequested) {
        this.floorRequested = floorRequested;
    }

    public void display() {
        System.out.println("Floor req: " + floorRequested);
    }
}

class LinkList {

    public Link firstRequest;

    LinkList() {
        firstRequest = null;
    }

    public boolean isEmpty() {
        return (firstRequest == null);
    }

    public void insertFirstRequest(int floorRequested) {
        Link newRequest = new Link(floorRequested);

        newRequest.next = firstRequest;

        firstRequest = newRequest;
    }

    public Link removeFirstRequest() {
        Link linkRef = firstRequest;

        if (!isEmpty()) {
            firstRequest = firstRequest.next;
        } else {
            System.out.println("No Requests");
        }
        return linkRef;
    }

    public void display() {
        Link theLink = firstRequest;

        while (theLink != null) {
            theLink.display();

            System.out.println("Next Request: " + theLink.next);
            theLink = theLink.next;

            System.out.println("");
        }
    }

    public Link find(int floorRequested) {
        Link theLink = firstRequest;

        if (!isEmpty()) {
            while (theLink.floorRequested != floorRequested) {
                if (theLink.next == null) {
                    return null;
                } else {
                    theLink = theLink.next;
                }
            }
        } else {
            System.out.println("No Requests");
        }
        return theLink;
    }

    public Link removeRequest(int floorRequested) {
        Link currenntRequest = firstRequest;
        Link previousRequest = firstRequest;

        while (currenntRequest.floorRequested != currenntRequest.floorRequested) {
            if (currenntRequest.next == null) {
                return null;
            } else {
                previousRequest = currenntRequest;
                currenntRequest = currenntRequest.next;
            }
        }
        if (currenntRequest == firstRequest) {
            firstRequest = firstRequest.next;
        } else {
            previousRequest.next = currenntRequest.next;
        }
        return currenntRequest;
    }

}
有什么问题吗?
下一个请求意味着是链接列表中的下一个请求(除最后一个索引外)。

您的
链接
类需要重写
toString()
方法。使用
+
运算符的字符串连接在Java中是专门处理的,您可以从(emphasis mine)中看到:

Java语言为字符串提供了特殊支持 连接运算符(+),用于将其他对象转换为 串。字符串连接是通过 StringBuilder(或StringBuffer)类及其追加方法字符串 转换是通过toString方法实现的,该方法由 对象,并由Java中的所有类继承。额外的 有关字符串连接和转换的信息,请参见Gosling,Joy, 以及Java语言规范Steele

连接它们时,会调用超类
java.lang.Object
上的
toString()
,这就是您获得该输出的原因

Floor req: 20
Next Request: elevator.model.Link@1db9742

Floor req: 10
Next Request: elevator.model.Link@106d69c

Floor req: 6
Next Request: elevator.model.Link@52e922

Floor req: 3
Next Request: null

问题是,默认情况下,如果使用“Next Request:+theLink.Next,JVM将使用方法toString将链接类转换为字符串类

如果你想

输出应该是这样的:

public class Link {

    public static void main (String[] args) {
        LinkList theLinkedList = new LinkList();
        theLinkedList.insertFirstRequest(3);
        theLinkedList.insertFirstRequest(6);
        theLinkedList.insertFirstRequest(10);
        theLinkedList.insertFirstRequest(20);

        theLinkedList.display();
    }

    int floorRequested;

    Link next;

    Link(int floorRequested) {
        this.floorRequested = floorRequested;
    }

    public void display () {
        System.out.println(toString());
    }

    @Override
    public String toString () {
        return "Floor req: " + floorRequested;
    }
}

class LinkList {

    public Link firstRequest;

    LinkList() {
        firstRequest = null;
    }

    public boolean isEmpty () {
        return (firstRequest == null);
    }

    public void insertFirstRequest (int floorRequested) {
        Link newRequest = new Link(floorRequested);

        newRequest.next = firstRequest;

        firstRequest = newRequest;
    }

    public Link removeFirstRequest () {
        Link linkRef = firstRequest;

        if (!isEmpty()) {
            firstRequest = firstRequest.next;
        } else {
            System.out.println("No Requests");
        }
        return linkRef;
    }

    public void display () {
        Link theLink = firstRequest;

        while (theLink != null) {
            theLink.display();

            System.out.println("Next Request: " + theLink.next);
            theLink = theLink.next;

            System.out.println("");
        }
    }

    public Link find (int floorRequested) {
        Link theLink = firstRequest;

        if (!isEmpty()) {
            while (theLink.floorRequested != floorRequested) {
                if (theLink.next == null) {
                    return null;
                } else {
                    theLink = theLink.next;
                }
            }
        } else {
            System.out.println("No Requests");
        }
        return theLink;
    }

    public Link removeRequest (int floorRequested) {
        Link currenntRequest = firstRequest;
        Link previousRequest = firstRequest;

        while (currenntRequest.floorRequested != currenntRequest.floorRequested) {
            if (currenntRequest.next == null) {
                return null;
            } else {
                previousRequest = currenntRequest;
                currenntRequest = currenntRequest.next;
            }
        }
        if (currenntRequest == firstRequest) {
            firstRequest = firstRequest.next;
        } else {
            previousRequest.next = currenntRequest.next;
        }
        return currenntRequest;
    }

}
您只需在toString方法中输入需要显示为String的任何信息

public class Link {

    public static void main (String[] args) {
        LinkList theLinkedList = new LinkList();
        theLinkedList.insertFirstRequest(3);
        theLinkedList.insertFirstRequest(6);
        theLinkedList.insertFirstRequest(10);
        theLinkedList.insertFirstRequest(20);

        theLinkedList.display();
    }

    int floorRequested;

    Link next;

    Link(int floorRequested) {
        this.floorRequested = floorRequested;
    }

    public void display () {
        System.out.println(toString());
    }

    @Override
    public String toString () {
        return "Floor req: " + floorRequested;
    }
}

class LinkList {

    public Link firstRequest;

    LinkList() {
        firstRequest = null;
    }

    public boolean isEmpty () {
        return (firstRequest == null);
    }

    public void insertFirstRequest (int floorRequested) {
        Link newRequest = new Link(floorRequested);

        newRequest.next = firstRequest;

        firstRequest = newRequest;
    }

    public Link removeFirstRequest () {
        Link linkRef = firstRequest;

        if (!isEmpty()) {
            firstRequest = firstRequest.next;
        } else {
            System.out.println("No Requests");
        }
        return linkRef;
    }

    public void display () {
        Link theLink = firstRequest;

        while (theLink != null) {
            theLink.display();

            System.out.println("Next Request: " + theLink.next);
            theLink = theLink.next;

            System.out.println("");
        }
    }

    public Link find (int floorRequested) {
        Link theLink = firstRequest;

        if (!isEmpty()) {
            while (theLink.floorRequested != floorRequested) {
                if (theLink.next == null) {
                    return null;
                } else {
                    theLink = theLink.next;
                }
            }
        } else {
            System.out.println("No Requests");
        }
        return theLink;
    }

    public Link removeRequest (int floorRequested) {
        Link currenntRequest = firstRequest;
        Link previousRequest = firstRequest;

        while (currenntRequest.floorRequested != currenntRequest.floorRequested) {
            if (currenntRequest.next == null) {
                return null;
            } else {
                previousRequest = currenntRequest;
                currenntRequest = currenntRequest.next;
            }
        }
        if (currenntRequest == firstRequest) {
            firstRequest = firstRequest.next;
        } else {
            previousRequest.next = currenntRequest.next;
        }
        return currenntRequest;
    }

}
Floor req: 20
Next Request: Floor req: 10

Floor req: 10
Next Request: Floor req: 6

Floor req: 6
Next Request: Floor req: 3

Floor req: 3
Next Request: null