2010-05-30 49 views
1

这是我对主类和双向链接类和节点类的代码,但是当我运行该程序时,在concole中将显示此“[email protected]”而不是随机数。请帮助我谢谢!将元素添加到双向链表中

主类:

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(); 
} 
    } 

和节点类是像你以前(节点分组,节点接下来,int值)看到的类

编辑:我添加了toString方法,但会显示行“result.append(temp.getValue()+” - “”;“)的空指针异常”请帮助我,谢谢

回答

2

当你在一个对象上调用System.out.println它(友好地)调用该对象的toString方法。如果您尚未为某个对象定义toString,则将获得由其中一个祖先定义的对象。在你的情况下,你不扩展任何东西,所以你会得到toString Object - 可能不是你想要的。

尝试在你的类中定义一个toString()方法。在其中,您应该循环遍历节点并构建一个包含所需表示的String

+0

嗨我已经习惯了字符串方法 但现在它会显示一个异常空指针异常 – user329820 2010-05-30 08:51:44

+0

当你尝试用空对象做某事时会触发该异常。我最好的猜测是add方法不正确,'temp'在某个点变成'null',而不是变成'tail' – nc3b 2010-05-30 09:22:59

1

当您打印对象时,它会执行它的.toString()方法。 你看到的是默认的toString实现。

你可以重写的ToString定制得到集团的印刷版的东西 - 你的情况,你可能会遍历所有的项目,并创建一个逗号分隔的数字列表或某事

0

运行System.out.println(Object);需要Object转换成一个字符串。它通过执行toString方法执行此操作。如果对象未实现toString,则使用默认实现,该实现将返回类名称及其哈希码。

您将需要重写该对象并提供合适的toString或循环遍历元素并在自己调用println之前构建您的字符串。