2011-11-27 41 views
1

我不能理解爲什麼這段代碼不工作。我正在創建一個函數,以用戶指定的頻率在給定x間隔內的所有點上評估多項式。我的基礎多項式代碼無法解決問題。我的問題是用我從霍納的方法獲得的值填充我的數組。初始化一個雙精度數組java

public double[] evalAt(double s, double f, int n) { 
    double[] resultArray = new double[n]; 
    double h =((f - s)/(n)); 
    if(s==f) { 
     double tempResult = 0; 
     for (int i = this.degree; i >= 0; i--) { 
      tempResult = tempResult * s + this.terms[i].getCoefficient(); 
     } 
     resultArray[0] = tempResult; 
    } else { 
     int counter = 0; 
     for(double i = s; i <= f; i=i+h) { 
      double tempResult = 0; 
      for (int j = this.degree; j >= 0; j--) { 
       tempResult = tempResult * i + this.terms[j].getCoefficient(); 
      } 
      System.out.println("Counter: " + counter + " Result @ Counter: " + tempResult); 
      resultArray[counter++] = tempResult; 
     } 
     System.out.println(resultArray[0]); 
     System.out.println(resultArray[1]); 
     System.out.println(resultArray[2]); 
     System.out.println(resultArray[3]); 
    } 
    return resultArray; 
} 

我有一個print聲明,證明我什麼計數器的值和臨時結果的。然後我使用resultArray['index'] = 'value';語法。當我運行這個時,我發現計數器和值與我想要的完全一樣,但是當我檢查底部的四個print聲明時,沒有任何反應。我的輸入爲0,10,10

輸出:

Counter: 0 Result @ Counter: 0.0 
Counter: 1 Result @ Counter: 1.0 
Counter: 2 Result @ Counter: 4.0 
Counter: 3 Result @ Counter: 9.0 
Counter: 4 Result @ Counter: 16.0 
Counter: 5 Result @ Counter: 25.0 
Counter: 6 Result @ Counter: 36.0 
Counter: 7 Result @ Counter: 49.0 
Counter: 8 Result @ Counter: 64.0 
Counter: 9 Result @ Counter: 81.0 
Counter: 10 Result @ Counter: 100.0 
+1

你爲什麼不修理你的縮進,再看看?我的猜測是括號裏的內容沒有按照你的想法做。 – user949300

+0

再次嘗試編譯 – Max

+0

這兩個解決方案都無法正常工作,儘管我很欣賞即時答覆。 – user1068366

回答

3

我強烈懷疑它拋出了一個ArrayIndexOutOfBoundsException,它正在被此方法吞噬。

您正在創建一個大小爲n的數組,在這種情況下爲10,但是您的計數器從零到f(也是10),這是總共11個元素。所以至少在其中一箇中有一個是off-by-one。

看你的代碼,發現說

catch (Exception e) { 
} 

位並將其更改爲

catch (Exception e) { 
    e.printStackTrace(); 
} 

,以幫助更容易捕獲這種類型的錯誤。

+0

我在程序的其他地方處理異常,實際上它是一個數組越界異常......非常感謝大家! – user1068366

+0

做n = 1的心理檢查你需要兩個結果,開頭和結尾。 resultArray []的大小必須爲2,而不是1.所以你的第二行必須是[n + 1]。 – user949300

1

不幸的是我不能發表評論,因爲這不是一個具體的答案,但我已經檢查並運行代碼,它對於我來說運行良好。用一個固定的係數和度代替,表明括號沒有問題,你不是(正如我懷疑的那樣)在內部範圍內重新初始化resultArray變量。

這是直接複製/粘貼有問題的代碼嗎?

通常,當我遇到像這樣的問題時,與賦值無關,而是因爲'resultsArray'實際上是2個不同的變量,我錯誤地分配了它,但由於多態性而沒有收到任何錯誤。

+0

是的這是一個直接複製和粘貼。當我用'0'代替counter ++時,我得到'0'元素中的最後一個tempResult(因爲它被覆蓋,直到循環結束),然後所有其他元素都會顯示0.0作爲它們的內容。感謝您的快速回復! – user1068366

+0

不客氣:)在你打印出resultArray內容時,你會說「什麼都沒有發生」,你看到了什麼?你的意思是什麼都不打印我們的任何東西或價值觀是錯誤的? – AntonyM

+0

如果你沒有得到任何輸出,那麼我會說你應該包裝整個方法的內容在一個try {} catch(Throwable x){x.printStackTrace(); }因爲我認爲(可能)你可能會得到一個ArrayIndexOutOfBoundsException但捕獲它並不打印在某個地方? – AntonyM