打印在java中生成错误的输出

时间:2016-06-22 03:26:04

标签: java performance data-structures linked-list nodes

我在Java中练习链表。所以,我制作了三个节点并给它们赋值1,2和3.当我运行代码时,我想要输出

1 2 3

但代码正在提供输出

333435

我检查了代码,看起来是正确的。我不知道为什么代码会产生意外的输出。任何人都可以帮助我。

提前致谢。

class LinkedList{
    Node head;

    static class Node
    {
            int data;
            Node next;
            Node(int d){
                data = d;
                next = null;
           }
    }
    public void printList(){
        Node n = head;
        while (n != null){
            System.out.print(n.data + ' ');
            n = n.next;
        }
    }
    public static void main(String[] args)
    {
        LinkedList llist = new LinkedList();

        llist.head  = new Node(1);
        Node second= new Node(2);
        Node third = new Node(3);

        llist.head.next = second;
        second.next = third;

        llist.printList();
    }
}

2 个答案:

答案 0 :(得分:3)

您的代码是正确的,但您面临的问题在于

System.out.print(n.data + ' ');

代替

System.out.print(n.data + " ");

首先你应该知道: -

单引号用于字符,双引号用于字符串。

当你这样做时

 n.data + ' '

它转换' '到它的ASCII值并将其添加到n.data。 空格的ASCII字符是32。因此,您的输出变为

1 +32 == 33

2 + 32 = 34

2 + 33 = 35

因此,

333435

并且没有空格,因为空间被转换为ASCII值 类似的类型代码将产生相同的输出。

例如: -

System.out.print(n.data +' *');

答案 1 :(得分:1)

在printList()方法中,您有:

// this converts the space char to an int and adds it the data.
System.out.print(n.data + ' '); 

将其更改为:

// this will print the data and concatenate a space after it
System.out.print(n.data + " ");

注意:ascii中的空格字符是十进制的32,这就是你得到33,34和35的原因