这总是输出1,我不知道为什么,我试图制作一个方法,取一个二维数组的元素的平均值。这是一个类的一部分,我从主类中调用它。
return new ConcreteProtoType(*this);
答案 0 :(得分:1)
您的代码存在多个问题。
首先,我猜内环中的j < cols
应为j < a.cols
。
其次,最重要的是,这不是你对一组数字的平均值。
你应该首先对它们求和,然后将总数除以样本数,例如
public static double Ave(Array_two a) {
double sum = 0; // you want to return a double
double total = a.rows * a.cols;
if (total == 0) return 0; // watch out for possible division by 0
for (int i = 0; i < a.rows; i++) {
for (int j = 0; j < a.cols; j++) {
sum += a.values[i][j];
}
}
return sum / total;
}
答案 1 :(得分:0)
你可以得到这样的平均值:
public static double Ave(Array_two a) {
int count = a.rows * a.cols;
if (count == 0) {
return 0;
}
double total = 0;
for (int i = 0; i < a.rows; i++) {
for (int j = 0; j < a.cols; j++) {
total += a.values[i][j];
}
}
return total / count;
}
答案 2 :(得分:0)
正如Federico klez Culloca在评论中所说,这不是计算平均值的正确代码。您需要对for循环中的所有值求和,然后除以之后的值总数。他对于平均值需要为double(小数)的事实也是正确的,否则结果将是int(整数)。你应该尝试类似的东西:
public static double Ave(Array_two a) {
double average = 0;
int sum = 0;
int total = a.rows * a.cols;
for (int i = 0; i < a.rows; i++) {
for (int j = 0; j < a.cols; j++) {
sum += a.values[i][j];
}
}
average = sum / total;
return average;
}
sum += a.values[i][j];
表示sum = sum + a.values[i][j];
的位置
希望这可以帮助!如果您需要更多说明,请随时发表评论:)
答案 3 :(得分:0)
正如@Federicoklez已经在这里评论的那样是您的代码的问题..
1)而不是j&lt; cols应该是j&lt; a.cols
2)整数除以整数yiels整数 即 5/2 = 2而不是2.5
3)例如,如果要计算 {1,5,2,3} 的平均值 它计算为 {1 + 5 + 2 + 3} / 4 ,即。按项目数量划分的数字总和,但您计算的是 1/4 + 5/4 + 2/4 + 3/4 ;
现在在你的程序中实现所有这些将会产生类似的结果。
public static double Ave(Array_two a) {
int total = a.rows * a.cols;
double sum=0;
for (int i = 0; i < a.rows; i++) {
for (int j = 0; j < cols; j++) {
sum +=a.values[i][j];
}
}
return sum/total;
}
答案 4 :(得分:0)
Double average = Arrays
.stream(new double[][]{{1.2, 3.4}, {1.2, 3.4}})
.mapToDouble(
row -> Arrays.stream(row).average().getAsDouble()
)
.average()
.getAsDouble();
如果使用java 8