使用toString方法而不是Print方法

时间:2014-11-11 16:03:59

标签: java tostring

如何在我的代码中使用toString方法,而不是下面的自定义print方法?我当前代码的输出正是它应该是的,但是我的导师希望我“使用toString并获得相同的输出”。我很困惑,不知道该怎么做。

这是我的代码:

public class LinkedListIntro {

    //print method 
    public static void print(Node temp) {
        System.out.print("[");
        while (temp.getNext() != null) {
            System.out.print(temp.getData() + ", ");
            temp = temp.getNext();
        }
        System.out.println(temp.getData() + "]");
    }

    public static void main(String[] args) {
        Node start = null;
        Node temp = null;

        for (int i = 1; i <= 5; i++) {
            if (start == null) {
                start = new Node(i);
                temp = start;
            } else {
                temp.setNext(new Node(i));
                temp = temp.getNext();
            }
        }

        //3. printing data
        print(start);

        //4. removing 4  
        temp = start;
        Node n = temp.getNext();

        while (n.getNext() != null) {
            if ((int) n.getData() == 4) {
                temp.setNext(n.getNext());
                n = null;
                break;
            }
            temp = temp.getNext();
            n = n.getNext();
        }

        //5. printing data again after removing 4
        print(start);

        //6. adding 100 between 1 and 2  
        temp = start;
        Node n1 = temp.getNext();

        while (n1.getNext() != null) {
            if ((int) temp.getData() == 1) {
                temp.setNext(new Node(100));
                temp = temp.getNext();
                temp.setNext(n1);
            }
            temp = temp.getNext();
            n1 = n1.getNext();
        }

        //7. printing data again after adding 100
        print(start);

        //8. removing first node
        temp = start;
        start = start.getNext();
        temp = null;

        //printing data after removing 1st node
        print(start);

        //9. add 0 to beginning
        temp = start;
        start = new Node(0);
        start.setNext(temp);

        //printing the final data
        print(start);
    }
}

public class Node<E>
{

        private E data;
        private Node next;

        public Node(E data) {
           this.data = data;
           this.next = null;
        }

        public E getData(){
            return data;
        }

        public Node getNext() {
            return next;
        }

        public void setNext(Node next) {
            this.next = next;
        }

        public String toString() {
            return data.toString();
        }
}

5 个答案:

答案 0 :(得分:0)

toString()方法返回对象的“字符串表示”,这意味着它将对象的信息作为字符串返回。 toString()被实现它的每个类覆盖。全局超类(Object)具有.toString()方法,但它通常不返回我们想要的信息。我想他希望你创建自己的toString(),它返回Node对象的字符串表示。然后你可以在这个字符串上调用System.out.print()来显示它。

答案 1 :(得分:0)

我会创建一个toString方法,该方法返回LinkedListIntro类中的字符串,该字符串将执行print方法正在执行的操作。但是不是打印它会继续将值附加到字符串并返回字符串

答案 2 :(得分:0)

我相信你的讲师意味着在班级toString()中你必须为整个链接列表返回一个字符串,而不仅仅是当前节点。

诀窍是要正确地执行它,您可能需要递归地或使用辅助变量来执行此操作。您基本上需要将当前项目的data的{​​{1}}结果添加到toString()获得的任何内容中。

一旦这样做,您将不需要next功能。

答案 3 :(得分:0)

使用当前print方法中的代码,在toString() Node方法中构建输出字符串。之后,print可以将Node temp参数传递给System.out.print(),因为它会在内部使用toString()

public static void print(Node temp) { //irrelevant method by now
   System.out.print(temp); 
}

public class Node<E>{

    private E data;
    private Node next;

    //...

    public String toString() {
       String ouput = "";
       Node node = this;
       while(node.getNext() != null) {
          output +=  node.getData() +", ";
          node = node.getNext();
       }
       return ouput; 
   }
}

答案 4 :(得分:0)

我认为你的导师希望你在你的类中实现toString()方法。 您创建的每个类都是Object类的子类,因为这是每个对象的超类。这个类有一些方法,比如toString()。在新类中,您应该重写方法toString()。此方法必须返回一个String,该String应该是关于此类的每个对象的描述或一些有用的文本。 这样做的目的是,如果您的新类被转换为Object,当您调用toString()方法时,它将获得新类的正确表示。

你有一个班级:

public class SomeClass {
   public String text;

   public SomeClass() {
      text = "hello world";
   }

   @Override public String toString() {
      return (text);
   }
}

在你的主要功能中:

public static void main(String[] args)  {
   //new object of type SomeClass
   SomeClass someClass = new SomeClass();
   System.out.println(someClass.toString());
   //casting it to superclass Object
   Object someClass_cast = (Object)someClass;
   System.out.println(someClass_cast.toString());
}

您的输出将是:

hello world
hello world

我希望这可以帮到你。