2014-08-29 123 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; 
}