2013-04-18 38 views
0

一個ArrayList所以我就來回好幾次嘗試多種不同的方法,但我似乎無法環繞此方法的適當的算法我的頭。我創建了一個使用ArrayList的Polynomial類,其中Term(int coeff,int expo)coeff是多項式的係數,expo是指數。在測試類中,我必須插入多個不同的Term對象,但它們需要按其指數以升序插入(例如,4x^1 + 2x^3 + x^4 + 5x^7)插入升序排列的對象與Java中

這是代碼我有最多這需要兩個參數,係數_和博覽會插入件()方法的末尾:

public class Polynomial 
{ 

    private ArrayList<Term> polynomials ; 

    /** 
    * Creates a new Polynomial object with no terms 
    */ 
    public Polynomial() 
    { 
     polynomials = new ArrayList<>() ; 
    } 

    /** 
    * Inserts a new term into its proper place in a Polynomial 
    * @param coeff the coefficient of the new term 
    * @param expo the exponent of the new term 
    */ 
    public void insert(int coeff, int expo) 
    { 

     Term newTerm = new Term (coeff, expo) ; 


     if (polynomials.isEmpty()) 
     { 
      polynomials.add(newTerm); 
      return; 
     } 


     int polySize = polynomials.size() - 1 ; 


     for (int i = 0 ; i <= polySize ; i++) 
     { 
      Term listTerm = polynomials.get(i) ; 
      int listTermExpo = listTerm.getExpo() ; 

      if (expo <= listTermExpo) 
      { 
       polynomials.add(i, newTerm); 
       return; 
      } 

      else if (expo > listTermExpo) 
      { 
       polynomials.add(newTerm) ; 
       return ; 
      } 

    } 

} 

問題出現靠近代碼的末尾。一旦我放入一個其係數不是< = Term的索引,它將轉到else if語句並將其添加到列表的末尾。這是錯誤的,因爲它需要被添加到只比下一個係數更大的地方。僅僅因爲它大於該係數並不意味着它的最大系數。我試着for語句做向後其中:

for (i = polySize ; i >= 0 ; i--) 
{ 
    etc. 
} 

但是,這並沒有工作,要麼因爲它提出了同樣的問題,只是周圍的其他方法。如果任何人可以提供一些解決方案或答案,將非常感激,因爲我很困惑。在這一點上,我確信我只是讓它太複雜了。我只想知道如何識別指數較大,但隨後回到for循環,直到它小於或等於索引的指數。

另外,我應該提,我不能使用任何其他集合或類,所以我必須使用的,如果做到這一點,否則,或while語句做。 在此先感謝!之後的for循環

 else if (expo > listTermExpo) 
     { 
      polynomials.add(newTerm); 
      return; 
     } 

地點是::

+0

所以纔要總結這一切時,你問如何通過將期限與ArrayList的索引爲0的最大系數進行排序的ArrayList,以及第二大的指數1等..? – 2013-04-18 02:23:07

+0

沒有實際相反,我想把期限與該ArrayList年底最大的指數,在指數的ArrayList 0最小的指數,該係數在多項式 – 2013-04-18 02:26:49

回答

1

從for循環中刪除此

polynomials.add(newTerm); 
return; 

推理:你想將其添加到列表的末尾,只有當它是不低於其中任何一項 - 不只是第一屆。

此外,它是很好的格式有;緊接在聲明之後,它之間沒有空格,並且()沒有立即在它們內部有任何空格。我編輯了我從您複製的代碼以顯示我的意思。

+0

的排序無關緊要這解決了我的問題!我知道我正在讓它變得比需要的複雜。非常感謝你:) – 2013-04-18 02:32:56

+0

瞭解,我很欣賞反饋! – 2013-04-18 03:01:12

0

這應該有你指定的確切行爲:

public void insert(int coeff, int expo) { 
    Term newTerm = new Term(coeff, expo); 
    int max = polynomials.size(); 
    int min = 0; 
    int pivot; 
    while (max > min) { 
     pivot = (min + max)/2; 
     if (expo > polynomials.get(pivot).getExpo()){ 
      min = pivot + 1; 
     } 
     else { 
      max = pivot; 
     } 
    } 
    polynomials.add(min, newTerm); 
} 

這種算法會就在第一項的前面添加新的條款具有相同的指數,如果任何這樣的術語已經在列表中。