2014-08-29 169 views
0

我試圖寫一個程序返回數的量小於平均返回低於平均

例如,如果我有數字2,圖3和圖4所示,平均將是數字的量( 2.1 + 3.6 + 4.2)/ 3 = 3.3,由於2.3低於平均值,它將返回1,因爲有一個數字低於平均值。

我收到寫着

Type mismatch: cannot convert from double[] to int 

我的代碼中的錯誤:

public static void main(String[] args) { 

    double[] numbers = {2.1, 3.6, 4.2}; 

    System.out.println(belowaverage(numbers)); 
} 



public static int belowaverage(double[] ba) { 
    double sum = 0; 
    double average = 0; 

    for(int i = 0;i<ba.length;i++){ 
     sum = sum + ba[i]; 
     average = sum/ba.length; 
     if(ba[i]<average){ 
     return ba; 
    } 
} 

回答

2

你試圖返回數組ba這是列保持輸入數據,而不是計數。

您需要在當前for循環中保留平均值的計算,然後創建第二個for循環和int count變量,每當您在ba數組中找到一個小於平均值的數字時,該變量就會增加。然後在該循​​環之外返回count

而且這條線:

average = sum/ba.length; 

必須是第一環的外側。

@Edit:其他人提供的一些代碼,但它有邏輯的或者編譯時錯誤(並非全部我猜,我檢查的那些),所以這裏有一個工作版本:

public static int belowaverage(double[] ba) { 
    double sum = 0; 
    double average = 0; 
    int count = 0; 

    for(int i = 0; i < ba.length; i++) { 
     sum = sum + ba[i]; 
    } 
    average = sum/ba.length; 

    for(int i = 0; i < ba.length; i++){ 
     if (ba[i] < average) { 
      count++; 
     } 
    } 
    return count; 
} 

你不因爲sum的類型是double,所以需要將長度轉換爲double,以便將結果提升爲更大的類型。

0

您需要首先計算總和,然後計算平均值,然後計算低於此閾值的數量。

嘗試

public static int belowaverage(double[] ba) { 
    double sum = 0; 
    double average = 0; 
    int count = 0; 

    for(int i = 0;i<ba.length;i++){ 
    sum = sum + ba[i]; 
    } 
    average = sum/ba.length; 

    for(int i = 0;i<ba.length;i++){ 
    if (ba[i] < average) count++; 
    } 

    return count; 

} 
+0

這不會編譯 – 2014-08-29 03:01:23

+0

我有固定它。 – 2014-08-29 03:57:04

0
public static void main(String[] args) { 
    double[] numbers = {2.1, 3.6, 4.2}; 
    System.out.println(belowaverage(numbers)); 
} 

public static int belowaverage(double[] ba) { 
    double sum = 0; 

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

    double average = sum/length; 
    int belowAvgCount = 0; 
    for (int i = 0; i < length; i++) { 
     if (ba[i] < average) { 
      belowAvgCount++; 
     } 
    }   
    return belowAvgCount; 
} 
+2

這編譯,但不會返回正確的結果... – 2014-08-29 02:54:44

+0

對不起,我上次編輯..你可以刪除投票嗎? – 2014-08-29 02:59:29

+0

我在Netbeans中測試過,沒有編譯錯誤..你問的數量低於平均數,這就是我給出的! – 2014-08-29 03:03:02

0

這不會只使用單一的for循環的工作,因爲你不可能什麼,直到你計算出它比較平均。

試試你平均的計算和低於平均水平而言的計數分成兩個不同的循環:

public static int belowaverage(double[] ba) { 
    double sum = 0; 
    double average = 0; 
    for(double b : ba){ 
     sum += b; 
    } 
    average = sum/ba.length; 
    int count = 0; 
    for(double b : ba){ 
     if(b < average){ 
      count++; 
     } 
    } 
    return count; 
}