2015-06-02 2 views
0

Этот метод устанавливает значения коэффициента и экспоненты для полинома по порядку.
Он работает правильно. (Val = коэфф и val2 = ехр)Упростите коэффициент однотипных полиномиальных параметров с помощью Circular LinkedList

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 + 5x^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

отследить ваши значения экспоненты и проверить, существует ли он уже. если да -> вы просто пересчитываете коэффициент, иначе -> создайте новый узел с коэффициентом, 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, но спасибо за вашу идею. –

Смежные вопросы