如果你能帮忙回答这个问题我真的很感激:
我已经使用Java以非常标准的方式创建了自定义链表。以下是我的课程:
public class Node {
private Object obj;
private Node next;
public Node(Object obj){
this(obj,null);
}
public Node(Object obj,Node n){
this.obj = obj;
next = n;
}
public void setData(Object obj){
this.obj = obj;
}
public void setNext(Node n){
next = n;
}
public Object getData(){
return obj;
}
public Node getNext(){
return next;
}
}
public class linkedList {
private Node head;
public linkedList(){
head = null;
}
public void setHead(Node n){
head = n;
}
public Node getHead(){
return head;
}
public void add(Object obj){
if(getHead() == null){
Node tmp = new Node(obj);
tmp.setNext(getHead());
setHead(tmp);
}else{
add(getHead(),obj);
}
}
private void add(Node cur,Object obj){
if(cur.getNext() == null){
Node tmp = new Node(obj);
tmp.setNext(cur.getNext());
cur.setNext(tmp);
}else{
add(cur.getNext(),obj);
}
}
}
我正在尝试打印已插入列表中的值,如下所示
public static void main(String[] args) {
// TODO code application logic here
Node l = new Node("ant");
Node rat = new Node("rat");
Node bat = new Node("bat");
Node hrs = new Node("hrs");
linkedList lst = new linkedList();
lst.add(l);
lst.add(rat);
lst.add(bat);
lst.add(hrs);
Node tmp = lst.getHead();
while(tmp != null){
System.out.println(tmp.getData());
tmp = tmp.getNext();
}
}
但我从IDE获得的输出是
linklist.Node@137bd6a1
linklist.Node@2747ee05
linklist.Node@635b9e68
linklist.Node@13fcf0ce
为什么打印出参考但不打印字符串的实际值,如bat,ant,rat ......?
如果我想打印出实际值,那该怎么办?
非常感谢
答案 0 :(得分:4)
您的linkedList
课程已经为您创建了Node
!
linkedList list = new linkedList();
list.add("foo");
list.add("bar");
Node tmp = lst.getHead();
while(tmp != null){
System.out.println(tmp.getData());
tmp = tmp.getNext();
}
将打印
foo
bar
答案 1 :(得分:1)
您需要覆盖toString()
上的Node
方法:
@Override
String toString() {
String val = // however you want to represent your Node
return val;
}
并打印节点:
System.out.println(tmp);
或者,如果您知道自己只会存储Node.getData()
,请String
返回String
- 将Object
更改为String
Node
定义
或者,您可以使用泛型来指定节点内的数据类型
更新:经过多一点思考(由评论引起),我看到了一些不妥之处:
tmp.getData()
应返回一个字符串(基于Node的单个参数ctor并且您正在传递字符串),但输出是关于对Node
个对象的引用。 linkedList.add
是否有可能将Node
的obj成员重新设置为Node
?
答案 2 :(得分:-1)
LinkedList是Objects,Objects toString方法打印出引用。如果要打印出字符串,您可以将LinkedList更改为String / Generics,或者将打印输出为:
String output = (String)tmp.getData();
System.out.println(output);
(如果需要,可以在一行中执行此操作)。
答案 3 :(得分:-1)
Node类中的getData()返回Object类型。您需要将其转换为String,以便正确地通过println()进行打印。
的System.out.println((字符串)tmp.getData());
应该为你做的伎俩。