这是我的主类和双重链接的类和节点类的代码,但是当我运行程序时,在concole中将显示这个“datastructureproject.DoublyLinkedList@19ee1ac”而不是随机数。请帮助我谢谢!
主要课程:
public class Main {
public static int getRandomNumber(double min, double max) {
Random random = new Random();
return (int) (random.nextDouble() * (max - min) + min);
}
public static void main(String[] args) {
int j;
int i = 0;
i = getRandomNumber(10, 10000);
DoublyLinkedList listOne = new DoublyLinkedList();
for (j = 0; j <= i / 2; j++) {
listOne.add(getRandomNumber(10, 10000));
}
System.out.println(listOne);
}
}
双重链表类:
public class DoublyLinkedList {
private Node head ;
private Node tail;
private long size = 0;
public DoublyLinkedList() {
head= new Node(0, null, null);
tail = new Node(0, head, null);
}
public void add(int i){
head.setValue(i);
Node newNode = new Node();
head.setNext(newNode);
newNode.setPrev(head);
newNode = head;
}
public String toString() {
StringBuffer result = new StringBuffer();
result.append("(head) - ");
Node temp = head;
while (temp.getNext() != tail) {
temp = temp.getNext();
result.append(temp.getValue() + " - ");
}
result.append("(tail)");
return result.toString();
}
}
并且节点类就像您之前看到的类(节点prev,Node next,int value)
编辑:我添加了toString方法,但是会显示行“result.append(temp.getValue()+” - “)”的空指针异常;“请帮助我谢谢
答案 0 :(得分:2)
当你在一个对象上调用System.out.println
时,它(善意地)会调用该对象的toString
方法。如果您没有为对象定义toString
,您将获得由其中一个祖先定义的对象。在你的情况下,你没有扩展任何东西,所以你将获得Object
的toString - 可能不是你想要的。
尝试在类中定义toString()方法。在其中,您应该循环遍历节点并构建包含所需表示的String
。
答案 1 :(得分:1)
当您打印对象时,它会执行它的.toString()方法。 你看到的是默认的toString实现。
你可以覆盖.toString来自定义得到的内容 - 在你的情况下,你可能会循环遍历这些项目并创建一个以逗号分隔的数字或其他内容列表
答案 2 :(得分:0)
运行System.out.println(Object);
需要将Object
转换为字符串。它通过执行toString
方法来完成此操作。如果对象未实现toString
,则使用默认实现返回类名及其哈希码。
您需要覆盖对象并提供合适的toString
或循环遍历元素并在自己调用println
之前构建字符串。