2015-06-02 21 views
0

該方法按順序設置多項式的係數和指數值。
它工作正常。 (VAL =係數_和val2 = EXP)使用循環鏈表簡化相同功率多項式參數的係數

public void setCoef(int val, int val2){ 

    Node nptr = new Node(val, val2, null, null); 
    Node tmp, ptr; 
    boolean ins = false; 

    if (start == null) 
    { 
     nptr.setLinkNext(nptr); 
     nptr.setLinkPrev(nptr); 

     start = nptr; 
     end = start; 
    } 
    else if (val2 >= start.getData2()) 
    { 
     nptr.setLinkPrev(end); 
     end.setLinkNext(nptr); 

     start.setLinkPrev(nptr); 
     nptr.setLinkNext(start); 

     start = nptr; 
    } 
    else if (val2 <= end.getData2()) 
    { 
     end.setLinkNext(nptr); 

     nptr.setLinkPrev(end); 
     nptr.setLinkNext(start); 

     start.setLinkPrev(nptr); 

     end = nptr; 
    } 
    else 
    { 
     tmp = start; 
     ptr = start.getLinkNext(); 

     while (ptr != null) 
     { 
      if (val2 <= tmp.getData2() && val2 >= ptr.getData2()) 
      { 
       tmp.setLinkNext(nptr); 
       nptr.setLinkPrev(tmp); 
       nptr.setLinkNext(ptr); 

       ptr.setLinkPrev(nptr); 
       ins = true; 

       break; 
      } 
      else 
      { 
       tmp = ptr; 
       ptr = ptr.getLinkNext(); 
      } 
     } 
     if (!ins) 
     { 
      tmp.setLinkNext(nptr); 
      nptr.setLinkPrev(tmp); 
     } 
    } 
    size++; 
} 

在本例中,我無法找出如何簡化2X^3 + 5×^ 3節點一個節點7X^3而不斷裂命令。

p1.setCoef(2, 3); 
p1.setCoef(5, 3); 

這個例子應該是5x^8 + 5x^7 + 5x^6。

p1.setCoef(3, 6); 
p1.setCoef(5, 7); 
p1.setCoef(2, 6); 
p1.setCoef(5, 8); 

我的toString方法也沒有問題。

等待你的幫助,提前致謝!

+0

跟蹤您的指數值並檢查是否已經存在。如果是 - >您只需重新校正係數,否則 - >用coeff,exp創建新節點,並更新您的列表。 – zubergu

回答

0

最好使用TreeMap而不是Circular LinkedList。

public class Polynomial { 

    private final TreeMap<Integer, Integer> map = new TreeMap<>(); 

    public void setCoef(int coeff, int exp) { 
     Integer oldCoeff = map.get(exp); 
     if (oldCoeff == null) oldCoeff = 0; 
     map.put(exp, oldCoeff + coeff); 
    } 

    @Override 
    public String toString() { 
     StringBuilder sb = new StringBuilder(); 
     for (Entry<Integer, Integer> e : map.descendingMap().entrySet()) 
      sb.append("+").append(e.getValue()).append("x^").append(e.getKey()); 
     return sb.substring(1); 
    } 

    public static void main(String[] args) { 
     Polynomial p1 = new Polynomial(); 
     p1.setCoef(3, 6); 
     p1.setCoef(5, 7); 
     p1.setCoef(2, 6); 
     p1.setCoef(5, 8); 
     System.out.println(p1); // -> 5x^8+5x^7+5x^6 
    } 
} 
+0

我不得不使用Circular LinkedList,但是謝謝你的想法。 –