2014-10-09 10 views
0

我想調用此方法從數組中獲取中位數。該方法被聲明爲public double getMedian(double[]list){//code}如何調用帶有簽名「public double getMedian(double [] list){// code}」的方法「

我試着將方法調用爲getMedian(double,list),但是出現錯誤。什麼是正確的方法來調用該方法?

下面是完整的方法:

public double getMedian(double[] list) { 
    // calculate the length of the entries 
    // create an iterator 
    int factor = list.length - 1; 
    double[] first = new double[(int) ((double) factor/2)]; 
    double[] last = new double[first.length]; 
    double[] middleNumbers = new double[1]; 

    for (int i = 0; i < first.length; i++) { 
     first[i] = list[i]; 
    } 

    for (int i = list.length; i > last.length; i--) { 
     last[i] = list[i]; 
    } 

    for (int i = 0; i <= list.length; i++) { 
     if (list[i] != first[i] || list[i] != last[i]) 
      middleNumbers[i] = list[i]; 
    } 

    if (list.length % 2 == 0) { 
     double total = middleNumbers[0] + middleNumbers[1]; 
     return total/2; 
    } else { 
     System.out.println(middleNumbers); 
     return middleNumbers[0]; 
    } 
} 
+0

它要求的雙數組。 「list」就是它用於該數組的名稱。 – 2014-10-09 21:23:14

回答

1

該方法將一個雙精度數組作爲參數。你想使雙數組,並傳遞:

double[] values = {0.1d, 0.3d, 0.5d, 1.0d, 1200.0d};   
double median = this.getMedian(values); // should return 0.5d 

getMedian方法具有阻止其正常工作的一些邏輯錯誤。特別是,在第二循環開始超過數組的邊界:

for (int i = list.length; i > last.length; i--) { 
    last[i] = list[i]; 
} 

使用我的測試數據,i開始在5和計數,直到i5更大,但數組只有已從0索引到的元素4

+0

我看到謝謝你的幫助!自從它帶領我走向正確的方向之後,我會將其標記爲回答。謝謝! – user3078406 2014-10-09 21:59:34

0

它只是要求雙,單是你剛纔提出的陣列的名稱。你需要做

getMedian(double[] doubleArray, List list) 

當它被調用時使用2種不同的類型。

0

這樣的(這可以說是包括一個更優雅,和工作,getMedian的版本):

public class Test 
{ 
    public double getMedian(double[] list) 
    { 
     double median = 0; 

     if (list != null && (list.length > 0)) 
     { 
      // Sort ascending 
      Arrays.sort(list); 

      int numItems = list.length; 

      if ((numItems % 2) == 0) 
      { 
       // We have an even number of items - average the middle two 
       int middleIndex = numItems/2; 
       double firstMiddleValue = list[middleIndex - 1]; 
       double secondMiddleValue = list[middleIndex]; 
       median = (firstMiddleValue + secondMiddleValue)/2; 
      } 
      else 
      { 
       // Odd number of items - pick the middle one 
       median = list[(numItems/2)]; 
      } 
     } 

     return median; 
    } 

    public static void main(String[] args) 
    { 
     Test t = new Test(); 

     double[] testValuesOfLengthOne = { 3.1415 }; 
     double[] testValuesEvenLength = {22.5, 14.33, 100.849, 44.259, 0.0, 145000.0}; 
     double[] testValuesOddLength = {22.5, 14.33, 100.849, 44.259, 0.0, 145000.0, -4.9}; 

     System.out.println("Median of " + Arrays.toString(testValuesOfLengthOne) + " is " + t.getMedian(testValuesOfLengthOne)); 
     System.out.println("Median of " + Arrays.toString(testValuesEvenLength) + " is " + t.getMedian(testValuesEvenLength)); 
     System.out.println("Median of " + Arrays.toString(testValuesOddLength) + " is " + t.getMedian(testValuesOddLength)); 
    } 
} 

這給你以下的輸出:

Median of [3.1415] is 3.1415 
Median of [22.5, 14.33, 100.849, 44.259, 0.0, 145000.0] is 33.3795 
Median of [22.5, 14.33, 100.849, 44.259, 0.0, 145000.0, -4.9] is 22.5 
相關問題