面向对象的概念澄清

时间:2014-01-03 23:53:18

标签: java oop object linked-list object-oriented-analysis

我的OO概念有一些基本的疑问。我想解决这个问题

  

您有两个由链接列表表示的数字,其中每个节点   包含一个单位数字。数字以相反的顺序存储,   这样1位的数字位于列表的首位。写一个函数   添加两个数字并将总和作为链接列表返回。   示例输入:(3 - > 1 - > 5)+(5→9→2)输出:8 - > 0 - > 8

我知道它可以递归解决,但我尝试的是迭代测试问题。我写的方法就是这个

public LinkedList sum(LinkedList a){
    int carry = 0;
    Node head1 = a.first;
    Node head2 = this.first;
    LinkedList sum = new LinkedList();
    Node k = sum.first;
    if(a.first != null && this.first != null){
        k.item = (head1.item+head2.item) % 10;
        carry = (head1.item+head2.item) / 10;
    }
    head1 = head1.next;
    head2 = head2.next;

    while(head1 != null){
        k.next = new Node((head1.item + head2.item + carry) % 10);
        carry = (head1.item + head2.item) / 10;
        head1 = head1.next;
        head2 = head2.next;
        k = k.next;
    }
    return sum;
}

我用来调用它的方法就是这个

    LinkedList object1 = new LinkedList();
    LinkedList object2 = new LinkedList();
    object1.insert(5);
    object1.insert(1);
    object1.insert(3);
    object2.insert(2);
    object2.insert(9);
    object2.insert(5);
    LinkedList object3 = object1.sum(object2);
    object3.display();

我在行

中得到一个空指针异常
  

k.item =(head1.item + head2.item)%10;

如何修改sum方法以显示正确的结果。 Pleae不建议递归方式,因为我已经意识到这一点。这个问题的要点是我想澄清我的面向对象的概念。

有关详细信息,Node类看起来像这样

class Node {
    public int item;
    public Node next;
    public Node(int val){
        item = val;
    }

    public Node(){}

    public void displayNode() {
        System.out.println("[" + item + "] ");
    }
}

LinkedList类有一个全局声明

  首先是

私有节点;

1 个答案:

答案 0 :(得分:1)

初始化LinkedList会生成一个空的LinkedList对象,然后您必须使用节点填充该对象。您的总和LinkedList没有节点,因此您无法将节点k分配给sum.first。

要解决此问题,您需要使用Node k = new Node(); 但是最好在LinkedList实现中使用/创建一个add()方法来处理这个问题,以及remove()方法。这样您就不需要在求和链接列表中同时创建和跟踪节点。

除此之外,你应该注意检查head1和head2在求和之前都不等于null,否则你将被限制为相同数字长度的数字。