我有一个涉及节点的相当简单的不完整程序。 我还没走太远,但是我有一个问题。 我创建了一个节点,它是一个字符串类型。 但是,在运行程序时,输出的不是节点名称,而是输出节点名称,后跟“ @”和一堆字母和数字。
import java.util.Scanner;
public class Node {
public static void main (String[] args) {
Node x = new Node("ABCDEFG",null);
System.out.print(x);
}//void main
private String data;
private Node next;
public Node(String d, Node nx) {
data = d;
next = nx;
}
public String getData() {return data;}
public Node getNext() {return next;}
public void setData(String d) {data = d;}
public void setNext(Node n) {next = n;}
}// Node class
但是,输出未显示为顶部定义,但看起来像这样:
Node@6d06d69c
任何可能的解决方案?
答案 0 :(得分:0)
Node @ 6d06d69c是类型为Node的对象x的表示。要打印在构造函数中传递的实际字符串值,您需要调用getData()方法或在Node类中重写toString()来返回数据。
答案 1 :(得分:0)
首先,您需要了解Java中的toString。
Object类的toString方法返回一个字符串,该字符串由该对象是其实例的类的名称,符号字符“ @”和该对象的哈希码的无符号十六进制表示组成。 / p>
因此,请确保您print
要打印什么,您必须@Override
toString()
自动从Object
隐式继承。
这是针对您的情况的演示:
public class NodeToString {
static class Node {
int val;
Node next;
public Node(int theVal, Node theNext) {
this.val = theVal;
this.next = theNext;
}
@Override
public String toString() {
return String.format("{value: %d, hasNext: %s}", this.val, this.next != null);
}
}
public static void main(String... args) {
Node head = new Node(1, null);
System.out.println(head);
}
}
输出:
{value: 1, hasNext: false}