Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 试图找到2d数组的平均值时出现逻辑错误_Java - Fatal编程技术网

Java 试图找到2d数组的平均值时出现逻辑错误

Java 试图找到2d数组的平均值时出现逻辑错误,java,Java,这总是输出1,我不知道为什么,我正在尝试做一个方法,采取一个2d数组元素的平均值。这是一个类的一部分,我从一个主类调用它 public static double Ave(Array_two a) { int average = 0; int total = a.rows * a.cols; for (int i = 0; i < a.rows; i++) { for (int j = 0; j < cols;

这总是输出1,我不知道为什么,我正在尝试做一个方法,采取一个2d数组元素的平均值。这是一个类的一部分,我从一个主类调用它

public static double Ave(Array_two a) {
        int average = 0;
        int total = a.rows * a.cols;
        for (int i = 0; i < a.rows; i++) {
            for (int j = 0; j < cols; j++) {
                average = a.values[i][j] / total;
            }
        }
        return average;
publicstaticdouble-Ave(数组_两个a){
整数平均=0;
int total=a.rows*a.cols;
for(int i=0;i
你可以得到这样的平均值:

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;
}
publicstaticdouble-Ave(数组_两个a){
int count=a.rows*a.cols;
如果(计数=0){
返回0;
}
双倍合计=0;
for(int i=0;i
您的代码存在多个问题

首先,我想内部循环中的
j
应该是
j

其次,也是最重要的,这不是计算一组数字的平均值的方法

您应该首先将它们相加,然后将总数除以样本数

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;
}
publicstaticdouble-Ave(数组_两个a){
double sum=0;//您想返回一个double
双倍总计=a.行*a.列;
if(total==0)返回0;//注意可能被0除
for(int i=0;i
正如Federico klez Culloca在评论中所说,这不是计算平均值的正确代码。您需要将for循环中的所有值相加,然后除以之后的值总数。他还正确地指出,平均值必须是双精度(十进制),否则结果将是整数(一个整数)。您应该尝试以下方法:

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;
}
publicstaticdouble-Ave(数组_两个a){
双平均=0;
整数和=0;
int total=a.rows*a.cols;
for(int i=0;i
其中
sum+=a.values[i][j];
表示
sum=sum+a.values[i][j];

希望这有帮助!如果您需要更多说明,请随时发表评论:)

因为@Federicoklez已经在这里发表了评论,您的代码有问题

1) 应该有j 2) 整数除以整数表示一个整数 i、 e5/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;
  }
publicstaticdouble-Ave(数组_两个a){
int total=a.rows*a.cols;
双和=0;
for(int i=0;i

如果使用java 8

j
我想这应该是
j
,整数除法也会产生整数结果。而且,这不是计算平均值的方法。你将所有数字相加,最后返回它除以元素数。@FedericoklezCulloca你应该在一个answer@JackFlamp 完成:)好了,现在你给了他一个学校作业的完整解决方案。但是不管怎样。希望他能试着理解:)如果count==0返回0,那么-1和1的平均值是0是可以理解的,但是平均值也是零是……@javafan如果你不检查
count==0
当你这样做的时候,它最终会咬你
total/count
。除以零没有什么乐趣:)这很好,但将零的平均值返回为0也是一种咬人的行为。在这种情况下,我们可能会抛出异常
    Double average = Arrays
            .stream(new double[][]{{1.2, 3.4}, {1.2, 3.4}})
            .mapToDouble(
                    row -> Arrays.stream(row).average().getAsDouble()
            )
            .average()
            .getAsDouble();