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