アプリ版:「スタンプのみでお礼する」機能のリリースについて

キーボードから10人分の点数を格納する配列を用意し、平均点および平均点以上の人数と番号を表示するプログラムで、下記のプログラムを作成してみたんですけど、平均点以上の人数と番号がうまく表示されません。if文でも人数は0になるし、番号は1~10番まで表示されるし、なぜでしょうか?

import java.io.*;

class Hairetu2
{
public static void main(String args[]) throws IOException
{
System.out.println("10人分の点数を入力してください。");

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

int s[]=new int[10];

int i;
int sum=0,count=0;
double avg=0;

for(i=0; i<s.length; i++){
System.out.print((i+1)+"番は?");
String str = br.readLine();
int a = Integer.parseInt(str);
s[i]=a;

sum+=a;
avg = (double)sum/10;

if(avg<=count)
count++;
}
System.out.println("平均点は"+avg);
System.out.println("平均点以上の人は"+count+"人");

for(i=0; i<s.length; i++){
if(i>=avg)
i++;
System.out.print((i+1)+"番\t");
}
}
}

A 回答 (1件)

ループの1順でなにが行われるのか


変数が表している値はなにか
といったところを、よく考えなおしてください。
紙とエンピツで手計算する時にどういう順番でやるかを考えてみるのも手です。

> avg = (double)sum/10;
この時点では、sumには「今まで入力した人数分の合計」が入っています。
10人になるのは最後の1回だけです。それ以外は10で割っても平均にはなりません。
また、それまでの人数(=i+1)で割っても、「それまでの人数分の平均」であって「10人分の平均」ではありません。

> if(avg<=count)
> count++;

avgは「平均値」、countは「平均値以上の人の人数」ですよね?
この2つを比較する意味ってありますか?
また、上に書いたように、このループでは「全員の平均点」は計算できないのですから、「平均点以上かどうか」なんて判定できませんよね。

>if(i>=avg)
>i++;

これはさらに意図が不明です。
iはループで何番目かを表わすのに使っているようですが、それと平均値を比較する意図がわからないですし、判定結果によってはiを増やそうとするのもわかりません。
おそらく、平均が10以上になっているので i++が実行されず、1番から10番まで表示されたのでしょう。平均を5点くらいになるように入力してみてください。番号が飛び飛びになるはずです
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!