Java 如何在双数组中查找非零数?

Java 如何在双数组中查找非零数?,java,android,Java,Android,如果我有这样的双数组: [0.0,12.0.0,0.0,0.0,0.0,6.0,5.0,0.0] 而我想计算的平均值只有不到0.0的数字,为什么这个代码不能很好的工作呢 public static double Average(double[] myarray) throws IllegalArgumentException { double dValue = 0.0; int counter=1; if (myarray== null) {

如果我有这样的双数组:

[0.0,12.0.0,0.0,0.0,0.0,6.0,5.0,0.0]
而我想计算的平均值只有不到0.0的数字,为什么这个代码不能很好的工作呢

public static double Average(double[] myarray) throws IllegalArgumentException {
        double dValue = 0.0;
        int counter=1;
        if (myarray== null) {
            throw new IllegalArgumentException("The array must be defined or diferent to null");
        }
        if (myarray.length == 0) {
            throw new IllegalArgumentException("The array must have size greater than zero");
        }
        for(int i = 0 ; i < myarray.length ; i++) {
            if(myarray[i] > 0.0){
                counter++;
                dValue += myarray[i]/counter;
            }
        }
        return dValue;
    }
publicstaticdouble-Average(double[]myarray)抛出IllegalArgumentException{
双D值=0.0;
int计数器=1;
if(myarray==null){
抛出新的IllegalArgumentException(“数组必须定义或与null不同”);
}
如果(myarray.length==0){
抛出新的IllegalArgumentException(“数组的大小必须大于零”);
}
for(int i=0;i0.0){
计数器++;
dValue+=myarray[i]/计数器;
}
}
返回数据值;
}

除以循环后的
计数器
,而不是循环中的计数器


实际上,您必须始终除以最终计数器值减去1(而不是递增值),这在循环期间是不可能的。

除以
计数器
在循环之后,而不是在循环中


实际上,您必须始终除以最终计数器值减去1(不是递增值)这在循环过程中是不可能的。

原因是计数器在循环过程中递增,所以平均值总是错误的,因为每个数字没有在同一个计数器上被除。

原因是计数器在循环过程中递增,所以平均值总是错误的,因为每个数字没有在同一个计数器上被除相同的计数器

因为您使用了该行

dValue += myarray[i]/counter;
你应该让自己循环

for(int i = 0 ; i < myarray.length ; i++) {
        if(myarray[i] > 0.0){
            counter++;
            dValue += myarray[i];
        }
}
dValue = dValue / counter;

这一点非常重要,因为例如,当数组有1个元素时,您将返回该元素的值除以2,而不是除以1,因为您需要使用这一行

dValue += myarray[i]/counter;
你应该让自己循环

for(int i = 0 ; i < myarray.length ; i++) {
        if(myarray[i] > 0.0){
            counter++;
            dValue += myarray[i];
        }
}
dValue = dValue / counter;

这一点非常重要,因为例如,当您的数组有1个元素时,您将返回该元素的值除以2,而不是除以1。在每次迭代中,您将使用计数器进行除法,这不会给出平均值。一旦你得到了总数,你需要用最后的计数器数除以

只要这样做:

public static double Average(double[] myarray) throws IllegalArgumentException {
    double dValue = 0.0;
    int counter=1;
    if (myarray== null) {
        throw new IllegalArgumentException("The array must be defined or diferent to null");
    }
    if (myarray.length == 0) {
        throw new IllegalArgumentException("The array must have size greater than zero");
    }
    for(int i = 0 ; i < myarray.length ; i++) {
        if(myarray[i] > 0.0){
            counter++;
            dValue += myarray[i];
        }
    }
    return dValue/counter;
}
publicstaticdouble-Average(double[]myarray)抛出IllegalArgumentException{
双D值=0.0;
int计数器=1;
if(myarray==null){
抛出新的IllegalArgumentException(“数组必须定义或与null不同”);
}
如果(myarray.length==0){
抛出新的IllegalArgumentException(“数组的大小必须大于零”);
}
for(int i=0;i0.0){
计数器++;
dValue+=myarray[i];
}
}
返回数据值/计数器;
}

您在每次迭代中都使用计数器进行除法,这不会给出平均值。一旦你得到了总数,你需要用最后的计数器数除以

只要这样做:

public static double Average(double[] myarray) throws IllegalArgumentException {
    double dValue = 0.0;
    int counter=1;
    if (myarray== null) {
        throw new IllegalArgumentException("The array must be defined or diferent to null");
    }
    if (myarray.length == 0) {
        throw new IllegalArgumentException("The array must have size greater than zero");
    }
    for(int i = 0 ; i < myarray.length ; i++) {
        if(myarray[i] > 0.0){
            counter++;
            dValue += myarray[i];
        }
    }
    return dValue/counter;
}
publicstaticdouble-Average(double[]myarray)抛出IllegalArgumentException{
双D值=0.0;
int计数器=1;
if(myarray==null){
抛出新的IllegalArgumentException(“数组必须定义或与null不同”);
}
如果(myarray.length==0){
抛出新的IllegalArgumentException(“数组的大小必须大于零”);
}
for(int i=0;i0.0){
计数器++;
dValue+=myarray[i];
}
}
返回数据值/计数器;
}

你的意思是“如果”循环之外吗?@doctor
循环的
是指谁,
如果
没有定义循环,你的意思是“如果”循环之外吗?@doctor
循环的
是指谁,
如果
没有定义循环