java - 为什么代码只显示 `1 2` ?

标签 java linked-list nodes

我想测试我的程序,为了测试它,我只需将一个 ListNode 的整数转换为 String 并将这些转换连接起来。例如,如果我有:

ListNode object1;
object1 = new ListNode(2);
object1 = new ListNode(4);
object1 = new ListNode(3);

addTwoNumbers() 的输出应该是“243”(该方法的目标不同,我只是想测试它),但它给了我“1 2”。而且 Eclipse 也不会在此程序中运行调试器,不知道为什么。

public class ListNode {
    int val;
    ListNode next;
    ListNode(int x) {
        val = x;
    }

public String addTwoNumbers(ListNode l1, ListNode l2) {
    String l1Digits = "";
    String l2Digits = "";

    while(l1 != null) {
        l1Digits += Integer.toString(l1.val) + "";
        l1 = l1.next;
    }

    while(l2 != null) {
        l2Digits += Integer.toString(l2.val) + "";
        l2 = l2.next;
    }
    return l1Digits;
}


class Tester {

  public void main(String[] args) {
    ListNode object1;
    object1 = new ListNode(2);
    object1 = new ListNode(4);
    object1 = new ListNode(3);

    ListNode object2;
    object2 = new ListNode(5);
    object2 = new ListNode(6);
    object2 = new ListNode(4);

    System.out.println(addTwoNumbers(object1, object2));

  }
  }
}

最佳答案

而不是这个:

ListNode object1;
object1 = new ListNode(2);
object1 = new ListNode(4);
object1 = new ListNode(3);

ListNode object2;
object2 = new ListNode(5);
object2 = new ListNode(6);
object2 = new ListNode(4);

看来你确实是这个意思:

ListNode object1;
object1 = new ListNode(2);
object1.next = new ListNode(4);
object1.next.next = new ListNode(3);

ListNode object2;
object2 = new ListNode(5);
object2.next = new ListNode(6);
object2.next.next = new ListNode(4);

在原始代码中,您覆盖了object1object2 的值。 这相当于您的原始代码,当然不是您想要的:

ListNode object1 = new ListNode(3);
ListNode object2 = new ListNode(4);

要创建更长的列表,这可能会变得乏味。 您可以创建一个辅助方法以使其更容易,例如:

ListNode createList(int...values) {
    if (values.length == 0) {
        return null;
    }
    ListNode head = new ListNode(values[0]);
    ListNode node = head;
    for (int i = 1; i < values.length; ++i) {
        node.next = new ListNode(values[i]);
        node = node.next;
    }
    return head;
}

这将允许您将顶部的第一个代码替换为:

ListNode object1 = createList(2, 4, 3);
ListNode object2 = createList(5, 6, 4);

顺便说一句,您的程序中还存在其他问题。 在 addTwoNumbers 中,您分配给 l2Digits 但从未访问它。 它似乎完全没有被使用且毫无意义。 该方法只是连接第一个列表中的值并返回它, 所以它并没有做任何它的名字所暗示的事情。

关于java - 为什么代码只显示 `1 2` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33189838/

相关文章:

java - 将实体持久化到数据库和搜索引擎

java - 这种在 Java 中处理 IO 异常的模式是否正确?

java - 如何创建由两个单独的类组成的 LinkedList?

xml - Xpath,为什么两者都匹配?

c - 当我尝试向链接列表添加新节点时,为什么会出现段错误?

java - 很难收到此类型的安全警告

java - 解析 JSON 响应

java - Array 与 ArrayList 的性能

c - 我在哪里可以学习链接列表/堆栈?

c# - 我对将节点添加到链表的前面感到困惑。 (C#)