派生方法在应该返回newList的时候改变了原始列表



我有一个分配,我使用链表操纵多项式。作业的一部分是求多项式的一阶,二阶,三阶导数。我所有的方法都单独起作用。然而,在运行一阶导数方法后,它将原始输入列表更改为一阶导数是什么-这是我不想要的。

方法如下:

public ObjectList derivative(ObjectList list1) {
    newList = new ObjectList();
    ObjectListNode p = list1.getFirstNode();
    while (p != null) {
        Term t1 = (Term) p.getInfo();
        if (t1.getExp() == 0) {
            t1.setCoeff(0);
            attach(0,0);
            p = p.getNext();
        }
        else {
            t1.setCoeff(t1.getCoeff()*t1.getExp());
            t1.setExp(t1.getExp() - 1);
            attach(t1.getCoeff(), t1.getExp());
            p = p.getNext();
        }
    }
    return newList;
}

可以看到,导数方法的返回值是newList。但是,该方法正在更改原始列表。

在我的主目录中,我有这样的代码:

ObjectList poly1;
System.out.println("nEnter a polynomial (for derivatives): ");
poly1 = p.getPolynomial();
System.out.println("First derivative: ");
p.displayPoly(p.derivative(poly1));
System.out.println("nTest:");
p.displayPoly(poly1);

poly1最终改变。

我一直在使用的控制台输入是:3x^4+2x^3+1x^2-1x^1+8x^0

这可能是一个极其简单的错误,但由于某种原因我无法抓住它。谢谢你的帮助,我很感激!

编辑:派生方法中的attach方法:

private void attach (int coeff, int exp) {
    Term t = new Term (coeff, exp);
    newList.addLast(t);
}

您只是初始化newList实例(使用newList = new ObjectList()),而没有在其中放入任何内容,并且您正在更新输入列表list1的项。

你没有发布ObjectListObjectListNode的代码,所以我不能说你应该调用的确切方法,以便向newList添加节点,但是你应该为输入列表的每个节点添加一个新节点到newList,初始化它以包含输入列表各自的Term的副本,并更新newList的Term而不是输入列表的Term。

编辑:

您没有将newList传递给attach,因此您正在添加项的列表与您在derivative方法中初始化的列表不同。此外,您不应该根据输入列表的条件调用setCoeffsetExp,因为您不想更改它。

因此你应该替换:

        t1.setCoeff(0);
        attach(0,0);

:

        attach(0,0);

并替换为:

        t1.setCoeff(t1.getCoeff()*t1.getExp());
        t1.setExp(t1.getExp() - 1);
        attach(t1.getCoeff(), t1.getExp());

:

        attach(t1.getCoeff()*t1.getExp(), t1.getExp() - 1);

但是,如果您想要更新derivative方法中创建的newList,您应该将newList传递给attach方法,或者取消attach方法并将其内容移动到派生方法:

public ObjectList derivative(ObjectList list1) {
    newList = new ObjectList();
    ObjectListNode p = list1.getFirstNode();
    while (p != null) {
        Term t1 = (Term) p.getInfo();
        if (t1.getExp() == 0) {
            Term t = new Term (0,0);
            newList.addLast(t);
            p = p.getNext();
        }
        else {
            Term t = new Term (t1.getCoeff()*t1.getExp(), t1.getExp() - 1);
            newList.addLast(t);
            p = p.getNext();
        }
    }
    return newList;
}

相关内容

  • 没有找到相关文章

最新更新