簡體   English   中英

派生方法在應返回newList時更改原始列表

[英]Derivative method is changing original list when it should be returning 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添加一個新節點,進行初始化它包含輸入列表的相應術語的副本,並更新newList的術語,而不是輸入列表的術語。

編輯:

您沒有將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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM