2

该方法应平均六个正整数。负数或零整数不应包含在平均值中。如果所有数字都无效,则返回 -1。有没有办法缩短这段代码?

public float averageSix( int a, int b, int c, int d, int e, int f ) {
 if( a < 0 ) { a = 0; }
 if( b < 0 ) { b = 0; }
 if( c < 0 ) { c = 0; }
 if( d < 0 ) { d = 0; }
 if( e < 0 ) { e = 0; }
 if( f < 0 ) { f = 0; }
  float aver = ( ( a + b + c + d + e + f ) / ( ( a / a ) + ( b / b ) 
   + ( c / c ) + ( d / d ) + ( e / e ) + ( f / f ) ) );
 if( aver = 0 ) { aver = -1; }
  return aver;
}
4

2 回答 2

5

您可以使用数组来简化代码

这基本上是将您的方法精简为使用数组。我的计算只考虑了有效值(即,如果只有 3 个数字是有效的,那么我只将总和平均为 3),您可能需要更改它...

public float averageSix(int a, int b, int c, int d, int e, int f) {
    float sum = 0;
    float usedValues = 0;
    int[] values = new int[]{a, b, c, d, e, f};
    for (int value : values) {
        if (value >= 0) {
            usedValues++;
            sum += value;
        }
    }

    float average = -1;
    if (sum > 0) {
        average = sum / usedValues;
    }

    return average;
}

nb- 正如 Ted Hopp 所说,values声明可以缩短为

int[] values = {a, b, c, d, e, f};

任何让我们不必输入任何内容的东西都不会受到伤害;)

更高级但仍然有效,您可以使用varargs,它允许您传入任意数量的值(不仅仅是六个)...

public float average(int... values) {
    float sum = 0;
    float usedValues = 0;
    for (int value : values) {
        if (value >= 0) {
            usedValues++;
            sum += value;
        }
    }

    float average = -1;
    if (sum > 0) {
        average = sum / usedValues;
    }

    return average;
}
于 2013-09-18T04:25:36.757 回答
4
public float average(int[] numbers) {
    int sum = 0;
    int count = 0;
    for(int i = 0; i< numbers.length; i++)
      if(numbers[i] > 0) {
          sum += numbers[i];
          count++;
      }

    if(count == 0)
        return -1; // returns -1 if none is greater than 0

    return (float)sum/count;
}
于 2013-09-18T04:26:50.293 回答