2017-11-07 6 views
3
public class main { 

    public static void main(String[] args) { 
     aboveAverageTester(); 

    } 

    public static int aboveAverage(int a, int b, int c, int d, int e, int f) { 
     //This method computes the average of the parameters 
     //and then returns how many of the parameters are above the average. 
     int avg = (a + b + c + d + e + f)/6; 
     int above = 0; 

     if (a > avg) { 
      return a; 
     }else if (b > avg) { 
      return b; 
     }else if (c > avg) { 
      return c; 
     }else if (d > avg) { 
      return d; 
     }else if (e > avg) { 
      return e; 
     }else if (f > avg) { 
      return f; 
     }else{ 
      return a + b + c + e + f; 
     } 

    } 

    public static int aboveAverageTester() { 
     int aboveAverage = aboveAverage(10, 10, 10, 10, 45, 50); 
     System.out.println(aboveAverage); 
     return aboveAverage; 
    } 
} 

私はaboveAverageメソッドのロジックが完全にオフになっていることは知っていますが、平均以上の数のパラメータが返されるときに問題が発生します。別のメソッドに戻る平均値を上回る数値を計算する

私のコードからは、それぞれの後にa、b、cなどのように戻ってくると、それはちょうど1のインスタンスであり、平均よりも大きい他の人のリストに追加されないと思います。

私はこの方法では何も印刷せずに、ロジックのみをプリフォームしようとしています。

私は、上記の方法の一番下で、a、b、c、d、e、fをすべて追加して、それらからリストを作成するのではなく、ちょっと混乱していることを知っています。

誰も私にこのアプローチにどのような考えを与えることができますか?

+2

そのままですが、これは、「平均よりも上のパラメータの数」ではなく、「平均よりも上のパラメータの数」または「存在しない場合の合計」を返します(コメントによると)。 このような素晴らしい '' above = 0''変数を使用して、平均以上の変数ごとに+1を加えて、それを最後に返します。 ああ、条件がfalseのときに '' if(...)... else'ブランチのelseブランチが_only_であることを忘れないでください。そうすれば、 '' a> avg''、条件は決してチェックされません。 – Heinrich

+0

「それらからリストを作成する」を試しましたか? – Bernat

答えて

0

ない私はあなたを得たかどうかわから完全に質問していますが、平均より上の値の数を数えたいと思います。

ので、代わりの文が成立した場合、あなたはこのようにカウンタをインクリメントする必要があるときに値を返す:平均以上の要素の数をカウントするには

if (a > avg) { 
    above++; 
} 
1

メソッドは、カウントではなく値の1つを返します。 a + b + c + d + e + fの合計が6で割り切れない場合、平均を切り捨てます。

あなたはdouble結果の型を強制的に6.0で割る、平均ためdoubleを使用して、条件演算子との平均数値以上の数をカウントすることによってこの問題を解決することができます

double avg = (a + b + c + d + e + f)/6.0; 
return (a > avg ? 1 : 0) 
    + (b > avg ? 1 : 0) 
    + (c > avg ? 1 : 0) 
    + (d > avg ? 1 : 0) 
    + (e > avg ? 1 : 0) 
    + (f > avg ? 1 : 0); 
1

、あなたが各1との増分にループすることができます

のJava 8で
int aboveAverage = 0; 
List<Integer> numbers = Arrays.asList(a,b,c,d,e,f); 
for (int number : numbers){ 
    if (number > avg){ 
     aboveAverage++; 
    } 
} 
return aboveAverage; 

、あなたはそれほど冗長方法でそれを書くことができます::条件はtrueあるとしてカウンタ

long aboveAverage = Arrays.asList(a,b,c,d,e,f).stream() 
          .filter(n-> n > avg) 
          .count(); 
関連する問題