5 回答
TA贡献1856条经验 获得超17个赞
您应该计算正数并除以该计数,而不是除以:n
int count = 0;
for (int i = 0; i < n ; i++) {
if (values.get(i) > 0.0) {
sum += values.get(i);
count++;
}
}
if (count > 0) {
return ((double) sum) / count;
} else {
return 0;
}
TA贡献1828条经验 获得超3个赞
Your 等于数组的大小。相反,它应该是总正数的计数n
public static void main(String[] args) {
Integer[] array = new Integer[] { 3, 2, -4, -7 };
ArrayList arrayList = new ArrayList(Arrays.asList(array));
System.out.println(averagePositive(arrayList));
}
public static double averagePositive(ArrayList<Integer> values) {
if (values == null || values.isEmpty())
return 0.0;
int sum = 0;
int n = 0;
for (int i = 0; i < values.size(); i++)
if (values.get(i) > 0.0) {
sum += values.get(i);
n++;
}
return ((double) sum) / n;
}
TA贡献1900条经验 获得超5个赞
您需要将总和除以正元素的数量,而不是总大小。
public static double averagePositive(ArrayList<Integer> values) {
if (values == null || values.isEmpty())
return 0.0;
int sum = 0;
int positive_n = 0;
for (int i = 0; i < n ; i++)
if (values.get(i) > 0.0) {
sum += values.get(i);
positive_n++;
}
return ((double) sum) / positive_n;
}
TA贡献1816条经验 获得超4个赞
您的代码几乎是正确的。你唯一缺少的部分是你想取正元素的平均值,所以在你的情况下,元素的总量应该是2。您应该只计算正元素,如下所示:
int n = 0;
for (int i = 0; i < n ; i++)
if (values.get(i) > 0.0) {
sum += values.get(i);
n++;
}
这应该可以解决问题。
TA贡献1831条经验 获得超9个赞
您应该计算有多少个正值,而不是除以列表大小:
int positiveCount = 0;
for (int i = 0; i < n ; i++)
if (values.get(i) > 0.0) {
sum += values.get(i);
positiveCount++;
}
return ((double) sum) / positiveCount;
或者,您可以使用流:
public static double averagePositive(List<Integer> values) {
return values.stream()
.filter(d -> d > 0.0)
.mapToDouble(Function.identity())
.average().orElse(0.0);
}
添加回答
举报