2011-07-08 21 views
0

我一直在尝试在链表实现上工作我认为我已经钉了,但由于某种原因,我无法解决如何在开始时向列表添加新节点列表。Java多项式单链表问题

这是一个多项式加法,其他一切按预期工作,但本节不按预期方式工作。它返回没有变化的多项式...我想我错过了一些非常简单的东西,但无法看到它。

else if (power > polynomial.powerMax()) 
{ 

    Polynomial newlink = new Polynomial(coefficient,power); 
    newlink.successor = polynomial; 
    polynomial = newlink; 

} 

全法

public class Polynomial 
    { 
final static private int mantissa = 52; 
final static private double epsilon = Math.pow(2.0, -mantissa); 
private double coefficient = 0.0; 
private int power = 0; 
private Polynomial successor=null; 



public Polynomial(double coefficient, int power) 
{ 
    if (Double.isNaN(coefficient)) return; 
    if (Math.abs(coefficient) < epsilon) return; 
    if (power<0) return; 
    this.coefficient=coefficient; 
    this.power=power; 
} 

    public static void add(Polynomial polynomial, double coefficient, int power) 
{ 
    if (polynomial == null) return; 
    if (Math.abs(coefficient) < epsilon) coefficient = 0.0; 
    if (coefficient == 0.0) return; 
    if (power < 0) return; 

    if (power < polynomial.powerMin()) 
     { 
     Polynomial newNode = new Polynomial(coefficient,power); 
     if (polynomial.successor != null) 
     { 
      while (polynomial.successor != null) 
      { 
       polynomial.successor = polynomial.successor.successor; 
      } 

      polynomial.successor = newNode; 
     } 

     else if (polynomial.successor == null) 
      polynomial.successor = newNode; 

     } 
    else if (power > polynomial.powerMax()) 
    { 

     Polynomial newlink = new Polynomial(coefficient,power); 
     newlink.successor = polynomial; 
     polynomial = newlink; 

    } 

    else 
    { 
    if (power == polynomial.power) 
     polynomial.coefficient = polynomial.coefficient + coefficient; 

    } 

} 

回答

2

在Java中的变量引用由值(link)通过。这意味着如果您为变量多项式指定了任何新的东西,它将不会在此方法之外产生任何影响。

String x = "Foo"; 

public void change (String s) { 
    s="Bar"; 
} 

System.out.println(x); 
change(x); 
System.out.println(x); 

将打印

Foo 
Foo 

您需要返回您从添加方法创建新的多项式。

public static Polynomial add(Polynomial polynomial, double coefficient, int power) { 
    ... 
    return polynomial; 
} 
+0

您的意思是:“在Java中,变量通过**值**传递,并且引用也通过值传递,这意味着引用被复制”。 – Jesper

+0

@Jasper我改变了一下措辞,使自己更清晰 –

+0

有趣..好吧,这是一个旧的Uni作业,讲师已经给出了部分代码。 public static void add(Polynomial polynomial,double coefficient,int power) 已给出..所以这是不正确的? – Craig