我正在尝试编写一个返回小于平均数
的数字的程序例如,如果我有数字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;
}
}
答案 0 :(得分: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;
}
您不需要将长度转换为double
,因为sum
的类型为double,因此结果将提升为更大的类型。
答案 1 :(得分: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;
}
答案 2 :(得分: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;
}
答案 3 :(得分: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;
}