如何在我的代码中使用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();
}
}
答案 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
我希望这可以帮到你。