もくじ
ループ文の練習問題
ループ文(3-5)の練習問題記事の解答及び解説記事です。
プログラムの解答はあくまでも一例です。問題によっては違う記述方法もあります。
【Java】for 練習問題 サンプルプログラム
以下のプログラム内にはコメントで指示がありますので、コメントの下にプログラミングを行ってください。workフォルダ内に「Exam10.java」で保存してください。
保存後、コンパイルおよび実行を行ってください。
プログラム 解答例
1 2 3 4 5 6 7 8 9 10 11 |
class Exam10{ public static void main(String[] args){ /* 以下のxxxxxxxx部分を編集して、1-99まで数字が表示されるようにfor文を作成してください */ for(int i = 1; i < 100; i++){ System.out.println(i + "です"); } } } |
実行結果
c:\work>javac Exam10.java
C:\work>java Exam10
1です
2です
3です
4です
5です
~中略~
98です
99です
for 練習問題の解説
ポイント forでのループ指定方法
1 |
for(int i = 1; i < 100; i++){ |
forの構文は基本的に「for(初期化の式 ; 条件 ; 増減式 )」で構成されます。1から99までの場合は、カウンタ変数であるiを1で初期化し、99までループするように条件を記述します。
初期化の式 | int i = 1; |
---|---|
条件 | i < 100 ; |
条件は「i <= 99」としてループを回すこともできます。
【Java】while 練習問題 サンプルプログラム
以下のプログラム内にはコメントで指示がありますので、コメントの下にプログラミングを行ってください。workフォルダ内に「Exam11.java」で保存してください。
保存後、コンパイルおよび実行を行ってください。
プログラム 解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
class Exam11{ public static void main(String[] args){ /* xxxxxxxxの部分を編集して、 以下に1から100までの数値を足していくwhile文を完成させてください。 */ int count = 1; int result = 0; while(count <= 100){ result += count; count++; } System.out.println("合計は" + result + "です"); } } |
実行結果
C:\work>javac Exam11.java
C:\work>java Exam11
合計は5050です
while 練習問題の解説
ポイント1 whileでのループ指定方法
1 |
while(count <= 100){ |
whileの構文は「while(条件)」となっています。forと違い、初期化はwhileの前で行っており、条件のみの記述となります。また増減式もwhileブロック内部で「count++;」を記述しています。また、100までループを行うため、100以下という条件となっています。
ポイント2 変数内のデータを加算する
1 |
result += count; |
今回は、数値を加算して保存するための変数resultを用意しています。「result += count」は「result = result + count」に置き換えても同じように動作します。
ループ前のcountは1、resultは0です。resultの計算式およびcount++後のcountの値は以下の表のようになります。
状態 | result += count | count++ |
---|---|---|
ループ1回目 | result = 0 + 1 | 2 |
ループ2回目 | result = 1 + 2 | 3 |
ループ3回目 | result = 3 + 3 | 4 |
ループ4回目 | result = 6 + 4 | 5 |
ループ5回目 | result = 10 + 5 | 6 |
途中省略 | ||
ループ100回目 | result = 4950 + 100 | 101 |
countが101の時点で条件に合致しなくなりループが終了します。つまり、ループ終了時点で「resultは5050」「countは101」となります。
【Java】ループ文 練習問題 サンプルプログラム
以下の実行結果になるようなループ文(for、while等は問わない)を作成してください。workフォルダ内に「Exam12.java」で保存してください。
保存後、コンパイルおよび実行を行ってください。
プログラム 解答例
1 2 3 4 5 6 7 8 9 10 11 |
class Exam12{ public static void main(String[] args){ /* ループ文であればOK。ループ文で2の累乗を表示する */ for(int result = 2; result <= 100; result *= 2){ System.out.print(result + " "); } } } |
実行結果
2 4 8 16 32 64
ループ文 練習問題の解説
ポイント1 実行結果の規則性
今回の練習問題の結果は[2 4 8 16 32 64]と2倍ずつ値が増えています。
ポイント2 ループ指定方法
1 |
for(int result = 2; result <= 100; result *= 2){ |
resultと変数を用意し2で初期化を行います。
条件は100以下とし、64の2倍である128までは表示されないようにしています。つまり条件は[result < 128]などでも構いません。
最後に、増減式で[result *= 2]とし、resultに2をかけることで以下のようにresultの数値は変わります。
状態 | result *= 2 | 計算後のresultの値 |
---|---|---|
ループ1回目 | result = 2 * 2 | 4 |
ループ2回目 | result = 4 * 2 | 8 |
ループ3回目 | result = 8 * 2 | 16 |
ループ4回目 | result = 16 * 2 | 32 |
ループ5回目 | result = 32 * 2 | 64 |
ループ6回目 | result = 64 * 2 | 128 |
resultが128になった時点で100を超えるためループ終了となります。128は表示されません。
【Java】ループ文 練習問題
以下の実行結果になるようなループ文(for、while等は問わない)を作成してください。workフォルダ内に「Exam13.java」で保存してください。
保存後、コンパイルおよび実行を行ってください。
プログラム 解答例
1 2 3 4 5 6 7 8 9 10 11 |
class Exam13{ public static void main(String[] args){ /* ループ文であればOK。数字が2分の1ずつ減るループ文を作成する */ for(int result = 100; result >= 1; result /= 2){ System.out.print(result + " "); } } } |
実行結果
100 50 25 12 6 3 1
ループ文 練習問題の解説
ポイント1 実行結果の規則性
今回の練習問題の結果は[100 50 25 12 6 3 1]と値が2分の1ずつ減っています。なお25の半分は12.5ですが、今回はintを利用している為全て整数となっています。
ポイント2 ループ指定方法
1 |
for(int result = 100; result >= 1; result /= 2){ |
resultと変数を用意し100で初期化を行います。
条件は1以上とし、1より小さい数値が表示されないようにしています。つまり条件は[result > 0]などでも構いません。
最後に、増減式で[result /= 2]とし、resultを2で割ることで以下のようにresultの数値は変わります。
状態 | result /= 2 | 計算後のresultの値 |
---|---|---|
ループ1回目 | result = 100 / 2 | 50 |
ループ2回目 | result = 50 / 2 | 25 |
ループ3回目 | result = 25 / 2 | 12※ |
ループ4回目 | result = 12 / 2 | 6 |
ループ5回目 | result = 6 / 2 | 3※ |
ループ6回目 | result = 3 / 2 | 1 |
ループ7回目 | result = 1 / 2 | 0 |
※int同士の計算の為、整数の計算結果となる
resultが0になった時点で1より小さくなった為、ループ終了となります。0は表示されません。