【问题标题】:How to write a method in Java that averages six positve integers?如何用Java编写一个平均六个正整数的方法?
【发布时间】:2013-09-22 17:06:54
【问题描述】:

该方法应平均六个正整数。负数或零整数不应包含在平均值中。如果所有数字都无效,则返回 -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;
}

【问题讨论】:

  • 1.阅读此docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html。 2. 逻辑比较是'=',而不是'=='。 3. 负数应该被忽略,而不是假设为 0。请不要除以 0。 4. 使用数组而不是 6 个数字。
  • 试试这个:public float averageSix( int a, int b, int c, int d, int e, int f ) { int g = 6; if( a &lt; 0 ) { g--; } if( b &lt; 0 ) { g--; } if( c &lt; 0 ) { g--; } if( d &lt; 0 ) { g--; } if( e &lt; 0 ) { g--; } if( f &lt; 0 ) { g--; } if(g == 0 ) return -1; float aver = ( ( a + b + c + d + e + f ) / g ); if( aver = 0 ) { aver = -1; } return aver; }
  • (大卫伸手去拿他的水晶球)-我看到你的未来会被零错误除法。

标签: java methods integer average


【解决方案1】:

你可以使用arrays来简化代码

这基本上是将您的方法精简为使用数组。我的计算只考虑了有效值(即,如果只有 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;
}

【讨论】:

  • 附注:int[] values = new int[]{a, b, c, d, e, f}; 可以缩短为 int[] values = {a, b, c, d, e, f};new int[] 对于数组初始化表达式是可选的)。
  • @TedHopp 感谢您的评论,我已将其作为附注添加到答案中,因此更加突出!
【解决方案2】:
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;
}

【讨论】:

    猜你喜欢
    • 2018-09-15
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多