![](/img/trans.png)
[英]Method returning a NullPointerException when it should be returning a -1
[英]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
。
您沒有發布ObjectList
和ObjectListNode
的代碼,所以我無法說出將節點添加到newList
時應調用的確切方法,但是應該為輸入列表的每個節點向newList
添加一個新節點,進行初始化它包含輸入列表的相應術語的副本,並更新newList的術語,而不是輸入列表的術語。
編輯:
您沒有將newList
傳遞給attach
,因此要添加術語的列表與您在derivative
方法中初始化的列表不同。 另外,您不應該在輸入列表的條款上調用setCoeff
和setExp
,因為您不想更改它。
因此,您應該替換:
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.