もくじ
ループ文と配列の練習問題
配列とループ文の練習問題記事の解答及び解説記事です。
プログラムの解答はあくまでも一例です。問題によっては違う記述方法もあります。
【Java】配列 練習問題
以下のプログラム内にはコメントで指示がありますので、コメントの下にプログラミングを行ってください。workフォルダ内に「Exam14.java」で保存してください。
保存後、コンパイルおよび実行を行ってください。
プログラム 解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
class Exam14{ public static void main(String[] args){ /* 以下の配列を作成してください(newでも初期化子でも可) データ型:String[] 配列名:jp_week データ:"日","月","火","水","木","金","土" データ型:String[] 配列名:en_week データ:"Sun.","Mon.","Tue.","Wed.","Thu.","Fri.","Sat." */ String[] jp_week = {"日","月","火","水","木","金","土"}; String[] en_week = {"Sun.","Mon.","Tue.","Wed.","Thu.","Fri.","Sat."}; /* 「○曜日は英語では○です」という表示を全曜日分表示されるようにしてください。 ただし、配列とループ文を利用して表示してください。 */ for(int i = 0; i < jp_week.length; i++){ System.out.println(jp_week[i] + "曜日は英語では" + en_week[i] + "です"); } } } |
実行結果
日曜日は英語ではSun.です
月曜日は英語ではMon.です
火曜日は英語ではTue.です
水曜日は英語ではWed.です
木曜日は英語ではThu.です
金曜日は英語ではFri.です
土曜日は英語ではSat.です
配列 練習問題の解説
ポイント1 配列の定義(初期化子)
1 |
型[] 配列名 = {データ, データ, データ, ...}; |
今回のプログラムでは配列は2つともString型の為、データは””で囲まれています。
ポイント2 forのループ処理
1 |
for(int i = 0; i < jp_week.length; i++){ |
「配列名.length」の記述を行うと、配列内の要素数を取得できます。代わりに数値で7を記述しても問題ありませんが、配列の要素数分ループを回す場合は「配列名.length」の方が配列の便利です(要素数の変更があった場合に数値を変更しなくて済むため)。
【Java】配列 練習問題
2018-07-20 追加
以下のプログラム内にはコメントで指示がありますので、コメントの下にプログラミングを行ってください。workフォルダ内に「Exam1401.java」で保存してください。
保存後、コンパイルおよび実行を行ってください。
プログラム 解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
class Exam1401{ public static void main(String[] args){ /* 以下の配列を作成してください(newでも初期化子でも可) データ型:int[] 配列名:numbers データ:21,54,19,68,49,37,3,15,34,6 */ int[] numbers = {21,54,19,68,49,37,3,15,34,6}; /* numbers配列内で最も小さい数値を検索し表示してください (最小値はminという変数に格納し表示) */ int min = numbers[0]; for(int i = 1; i < numbers.length; i++){ if(min > numbers[i]){ min = numbers[i]; } } System.out.println("配列内の最も小さい数値は「" + min + "」です"); } } |
実行結果
C:\work>javac Exam1401.java
C:\work>java Exam1401
配列内の最も小さい数値は「3」です
配列 練習問題の解説
ポイント1 最小値を検索するための準備
1 |
int min = numbers[0]; |
配列内のデータを比較するために、配列の最初(0番目)をmin変数に代入しています。
ポイント2 最小値を検索する
1 2 3 4 5 |
for(int i = 1; i < numbers.length; i++){ if(min > numbers[i]){ min = numbers[i]; } } |
配列の1番目からループを回すためにiの初期値は1となっています。配列分ループを回し、以下のようにループが実行されます。
ループ1回目:if(min > numbers[1])
min(配列0番目)のデータと配列1番目のデータを比較して、minの方が大きければminに1番目のデータを代入します。
ループ2回目:if(min > numbers[2])
minのデータと配列2番目のデータを比較して、minの方が大きければminに小さい方のデータを代入します。
ループ3回目:if(min > numbers[3])
minのデータと配列3番目のデータを比較して、minの方が大きければminに小さい方のデータを代入します。
以下繰り返し…
つまり、一つずつ配列内のデータを比較し、小さい方のデータをmin(minが大きければ小さいデータを代入する)に代入して最小値としています。
追加
「Exam1401.java」を修正して最大値の表示も行えるように変更してください。最大値はmaxという変数内に格納し表示してください。(表示は実行結果参照)
プログラム 解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
class Exam1401{ public static void main(String[] args){ /* 以下の配列を作成してください(newでも初期化子でも可) データ型:int[] 配列名:numbers データ:21,54,19,68,49,37,3,15,34,6 */ int[] numbers = {21,54,19,68,49,37,3,15,34,6}; /* numbers配列内で最も小さい数値を検索し表示してください (最小値はminという変数に格納し表示) */ int min = numbers[0]; int max = numbers[0]; //追加 for(int i = 1; i < numbers.length; i++){ if(min > numbers[i]){ min = numbers[i]; } //追加のif if(max < numbers[i]){ max = numbers[i]; } } System.out.println("配列内の最も小さい数値は「" + min + "」です"); System.out.println("配列内の最も大きい数値は「" + max + "」です"); //追加 } } |
実行結果
C:\work>javac Exam1401.java
C:\work>java Exam1401
配列内の最も小さい数値は「3」です
配列内の最も大きい数値は「68」です
配列 練習問題の解説
ポイント1 最大値を検索するための準備
1 |
int max = numbers[0]; |
配列内のデータを比較するために、配列の最初(0番目)をmax変数に代入しています。
ポイント2 最大値を検索する
1 2 3 4 |
//追加のif if(max < numbers[i]){ max = numbers[i]; } |
最小値の検索と同じようにループ文内にifで条件を指定します。最小値とは逆でmaxが小さい場合にmaxに値を代入しています。
【Java】配列 練習問題
2018-07-20 追加
以下のプログラム内にはコメントで指示がありますので、コメントの下にプログラミングを行ってください。workフォルダ内に「Exam1402.java」で保存してください。
保存後、コンパイルおよび実行を行ってください。
プログラム 解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
class Exam1402{ public static void main(String[] args){ /* 以下の配列を作成してください(newでも初期化子でも可) データ型:int[] 配列名:numbers データ:32,79,35,25,82,77,34,16,61,39 */ int[] numbers = {32,79,35,25,82,77,34,16,61,39}; /* numbers配列内で偶数を検索し表示してください */ System.out.println("配列内の偶数は以下の数値です"); for(int i = 0; i < numbers.length; i++){ if(numbers[i] % 2 == 0){ System.out.println(numbers[i]); } } } } |
実行結果
C:\work>javac Exam1402.java
C:\work>java Exam1402
配列内の偶数は以下の数値です
32
82
34
16
配列 練習問題の解説
ポイント 偶数かどうかをチェックする
1 2 3 |
if(numbers[i] % 2 == 0){ System.out.println(numbers[i]); } |
条件は「numbers[i] % 2 == 0」となっています。
- 配列内のデータと2で剰余算を行い(numbers[i] % 2)、余りを求めます。
- 余りが0かどうかをチェックし、(1の結果 == 0)0の場合にtrueとなり、出力を行います。
ちなみに「%(算術演算)」と「==(比較演算)」は「%(算術演算)」の方が先に演算が行われます。
追加
「Exam1402.java」を修正して奇数の表示も行えるように変更してください。(表示は実行結果参照)
プログラム 解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
class Exam1402{ public static void main(String[] args){ /* 以下の配列を作成してください(newでも初期化子でも可) データ型:int[] 配列名:numbers データ:32,79,35,25,82,77,34,16,61,39 */ int[] numbers = {32,79,35,25,82,77,34,16,61,39}; /* numbers配列内で偶数を検索し表示してください */ System.out.println("配列内の偶数は以下の数値です"); for(int i = 0; i < numbers.length; i++){ if(numbers[i] % 2 == 0){ System.out.println(numbers[i]); } } System.out.println("配列内の奇数は以下の数値です"); for(int i = 0; i < numbers.length; i++){ if(numbers[i] % 2 != 0){ System.out.println(numbers[i]); } } } } |
実行結果
C:\work>javac Exam1402.java
C:\work>java Exam1402
配列内の偶数は以下の数値です
32
82
34
16
配列内の奇数は以下の数値です
79
35
25
77
61
39
配列 練習問題の解説
ポイント 奇数かどうかをチェックする
1 2 3 |
if(numbers[i] % 2 != 0){ System.out.println(numbers[i]); } |
条件は「numbers[i] % 2 != 0」となっています。
- 配列内のデータと2で剰余算を行い(numbers[i] % 2)、余りを求めます。
- 余りが0ではないかをチェックし、(1の結果 != 0)0ではない場合にtrueとなり、出力を行います。
【Java】ループ文と二次元配列 練習問題
この問題はExam14の記述を元に作成してください。
以下のプログラム内にはコメントで指示がありますので、コメントの下にプログラミングを行ってください。workフォルダ内に「Exam15.java」で保存してください。
保存後、コンパイルおよび実行を行ってください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
class Exam15{ public static void main(String[] args){ /* 以下の配列を2次元配列で作成してください(newでも初期化子でも可) データ型:String[][] 配列名:week データ:以下の2つの配列を組み合わせた二次元配列 {"日","月","火","水","木","金","土"} {"Sun.","Mon.","Tue.","Wed.","Thu.","Fri.","Sat."} */ String[][] week = { {"日","月","火","水","木","金","土"}, {"Sun.","Mon.","Tue.","Wed.","Thu.","Fri.","Sat."} }; /* 「○曜日は英語では○です」という表示を全曜日分表示されるようにしてください。 ただし、配列とループ文を利用して表示してください。 */ for(int i = 0; i < week[0].length; i++){ System.out.println(week[0][i] + "曜日は英語では" + week[1][i] + "です"); } } } |
実行結果
C:\work>javac Exam15.java
C:\work>java Exam15
日曜日は英語ではSun.です
月曜日は英語ではMon.です
火曜日は英語ではTue.です
水曜日は英語ではWed.です
木曜日は英語ではThu.です
金曜日は英語ではFri.です
土曜日は英語ではSat.です
配列 練習問題の解説
ポイント1 二次元配列
1 2 3 4 |
String[][] week = { {"日","月","火","水","木","金","土"}, {"Sun.","Mon.","Tue.","Wed.","Thu.","Fri.","Sat."} }; |
week配列のイメージは下の通りです。
ポイント2 ループ文と配列
1 2 3 |
for(int i = 0; i < week[0].length; i++){ System.out.println(week[0][i] + "曜日は英語では" + week[1][i] + "です"); } |
for文のカウンタ変数と2次元配列の添え字を以下のように対応させています。
3回目以降も繰り返し行い、配列の右側添え字が6になるまでループを行います。
【Java】制御構文と二次元配列 練習問題
以下のプログラム内にはコメントで指示がありますので、コメントの下にプログラミングを行ってください。workフォルダ内に「Exam16.java」で保存してください。
保存後、コンパイルおよび実行を行ってください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
class Exam16{ public static void main(String[] args){ String[][] colors = { {"赤","青","黄","緑","白","黒","灰","紫"}, {"Red","Blue","Yellow","Green","White","Black","Gray","Purple"} }; //日本語の指定色 String specified_color = "紫"; /* 以下のプログラムが完成するようにxxxxxxxの部分を埋めてください。 specified_colorで指定された色が見つかった場合、 対応する英語の色を表示できるようにしてください。 また、指定の色が見つかったらループは終了するようにしてください。 例:specified_colorが黄の場合、Yellowが表示される */ for(int i = 0; i < colors[0].length; i++){ if(specified_color.equals(colors[0][i])){ System.out.println(colors[1][i]); break; } } } } |
実行結果
C:\work>javac Exam16.java
C:\work>java Exam16
Purple
※うまくプログラミングできたらspecified_colorの色を変更後、確認してみましょう。
配列 練習問題の解説
ポイント 文字列比較
1 2 3 4 |
if(specified_color.equals(colors[0][i])){ System.out.println(colors[1][i]); break; } |
文字列は「文字列.equals(文字列)」で比較を行います。