节点字符串未正确打印输出

时间:2018-07-23 03:25:06

标签: java string nodes

我有一个涉及节点的相当简单的不完整程序。 我还没走太远,但是我有一个问题。 我创建了一个节点,它是一个字符串类型。 但是,在运行程序时,输出的不是节点名称,而是输出节点名称,后跟“ @”和一堆字母和数字。

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

任何可能的解决方案?

2 个答案:

答案 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}