簡體   English   中英

返回低於平均值的數量

[英]Return the amount of numbers below average

我正在嘗試編寫一個程序,該程序返回的數量少於平均值

例如,如果我有數字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;
    }
}

您正在嘗試返回數組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;
}

您無需將長度強制轉換為double因為sum是double類型的,因此結果將被提升為更大的類型。

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

嘗試

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;

}
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;
}

僅使用單個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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM