ヒント
思考過程を丁寧に追ってみると次のようになるであろう
【思考過程1】
入力されてくる値を足して合計を求める過程は決まった考え方をする
合計値保存変数=0にする
入力値をキーボードから受け取る
合計値保存変数に入力値を加える
入力値をキーボードから受け取る
合計値保存変数に入力値を加える
入力値をキーボードから受け取る
合計値保存変数に入力値を加える
:のようにすれば合計値が求まる
【思考過程2】
入力されてくる値を足して合計と平均を求めることを考える
平均値を,求めるためには,入力値の個数を数える変数を導入しておかなければならない合計値保存変数=0にする
個数を数える変数=0にする
入力値をキーボードから受け取る
合計値保存変数に入力値を加える
個数を数える変数を1増やす
入力値をキーボードから受け取る
合計値保存変数に入力値を加える
個数を数える変数を1増やす
入力値をキーボードから受け取る
合計値保存変数に入力値を加える
個数を数える変数を1増やす
:入力作業が終わったところで
平均値は,合計値保存変数の値を個数を数える変数の値で割ればよい
合計と平均値を表示
【思考過程3】
出てくる変数がほぼ決まったので,変数を決める
入力値を受け取る変数 int x
合計値保存変数 int sum
個数を数える変数 int count
平均値 double meansum=0;
count=0;
x=getInt("x = ");
sum=sum+x;
count++;
x=getInt("x = ");
sum=sum+x;
count++;
x=getInt("x = ");
sum=sum+x;
count++;
:入力作業が終わったところで
mean=(double)sum/(double)count;
System.out.printf("sum=%d\n",sum);
System.out.printf("mean=%lf\n",mean);(double)sumというのはsumをdouble型に変換するの意味
(double)countというのはcountをdouble型に変換するの意味
こうしておかないと,整数÷整数の演算になってしまって,小数点以下が切り捨てられてしまう。
【思考過程4】
終了の要件は,入力値が負になったら止めるということであるので
sum=0;
count=0;
x=getInt("x = ");
x<0なら★へジャンプ
sum=sum+x;
count++;
x=getInt("x = ");
x<0なら★へジャンプ
sum=sum+x;
count++;
x=getInt("x = ");
x<0なら★へジャンプ
sum=sum+x;
count++;
:★
mean=(double)sum/(double)count;
System.out.printf("sum=%d\n",sum);
System.out.printf("mean=%lf\n",mean);
【思考過程5】
同じ内容の区切りを考える。
繰り返し作業(ループ構造)になるので,ループの先頭は,ループ条件の判断部になるsum=0;
count=0;
x=getInt("x = ");
x<0なら★へジャンプ
sum=sum+x;
count++;
x=getInt("x = ");
x<0なら★へジャンプ
sum=sum+x;
count++;
x=getInt("x = ");
x<0なら★へジャンプ
sum=sum+x;
count++;
:★
mean=(double)sum/(double)count;
System.out.printf("sum=%d\n",sum);
System.out.printf("mean=%lf\n",mean);
【思考過程6】
ループ条件というのは,ループ脱出条件でなく,ループ継続条件でなければならないので
「x<0なら★へジャンプ」ではなく「0<=xなら★へジャンプせず,ループ作業に入る」となるsum=0;
count=0;
x=getInt("x = ");
0<=xならループ作業継続 {
sum=sum+x;
count++;
x=getInt("x = ");
}mean=(double)sum/(double)count;
System.out.printf("sum=%d\n",sum);
System.out.printf("mean=%lf\n",mean);
【思考過程7】
ところで,一番最初から-1が入力されてしまうと,countは0のままであり,平均値算出の時に0による割り算をしてしまう。これを避けなければならないので平均値算出を工夫する。
sum=0;
count=0;
x=getInt("x = ");
0<=xならループ作業継続 {
sum=sum+x;
count++;
x=getInt("x = ");
}もしcountが0でなかったら {
mean=(double)sum/(double)count;
System.out. printf("sum=%d\n",sum);
System.out.printf("mean=%lf\n",mean);
} そうでなかったら {
System.out.printf("合計値と平均値は求められない");
}