この総合演習問題では第1章から第3章までの総まとめの復習問題となります。
問題はどんどん難しくなっていきます。
前半は基本文法に即した比較的優しい問題です。
後半では文法を組み合わせた少し難しい問題となっています。
※記事内には用語の説明が掲載されているリンクが貼ってあります。
もくじ
コマンドライン引数
コマンドライン引数、条件分岐、ループ文に関する練習問題です。
【Java】コマンドライン引数 練習問題
以下の指示と実行結果に従ってプログラムを行ってください。workフォルダ内に「Exam25.java」で保存してください。
保存後、コンパイルおよび実行を行ってください。
【指示】
以下のプログラムをコメントの指示に従って完成させてください。どのように表示されるかは実行結果を確認してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
class Exam25{ public static void main(String[] args){ /* 以下の指示になるようにxxxxxにプログラムを記述して下さい コマンドライン引数のデータが一つではない場合は、「コマンドライン引数に数字を1つ入力してください」と表示 データが一つの場合は、その数字まで表示するループ処理を行う */ if(xxxxx){ System.out.println("コマンドライン引数に数字を1つ入力してください"); }else{ int limit = xxxxx ; for(int i = 1; i <= limit; i++){ System.out.print(i + " "); } } } } |
実行結果
C:\work>javac Exam25.java
C:\work>java Exam25
コマンドライン引数に数字を1つ入力してください
C:\work>java Exam25 5
1 2 3 4 5
C:\work>java Exam25 30
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
総合練習問題
ここからの問題は第3章までの様々な記述を利用してプログラムを作成していきます。
APIなどのすでに作られたプログラムを作成すれば簡単に記述できるのですが、この練習問題は一部を除き基本構文のみで作成してください。
※この問題からは必要に応じてヒントボタンがあり、ヒントを表示することができます。自力で解きたい人はボタンを押さずに解いてみてください。
【Java】総合練習問題 素数判定プログラム
以下の「プログラム内容」「実行結果」を確認して、プログラムを完成させてください。workフォルダ内に「Exam26.java」で保存してください。
保存後、コンパイルおよび実行を行ってください。
【プログラム内容】
コマンドライン引数で入力した数字が素数であるかどうかを判定するプログラムを作成してください。なお、コマンドライン引数には数字が必ず1つ入力され、その数字は3以上の数字であることを前提で作成してください。(数字でないデータが入力される、または入力されないなどのケースは考えなくていい)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
class Exam26{ public static void main(String[] args){ boolean isPrimeNumber = true; int number = Integer.parseInt(args[0]); //素数判定を行うプログラムを記述 if(isPrimeNumber) System.out.println(number + "は素数です"); else System.out.println(number + "は素数ではありません"); } } |
※ヒントはあくまでも一例です。
- forを利用してnumber-1までループを回す
- numberとカウンタ変数の値の剰余を行い、余りが出ない場合は、割り切れる数があると判定させる(つまり素数であると判定させる)
実行結果
C:\work>javac Exam26.java
C:\work>java Exam26 7
7は素数です
C:\work>java Exam26 10
10は素数ではありません
C:\work>java Exam26 11
11は素数です
【Java】総合練習問題 桁区切りプログラム
以下の「プログラム内容」「実行結果」を確認して、プログラムを行ってください。workフォルダ内に「Exam27.java」で保存してください。
保存後、コンパイルおよび実行を行ってください。
【プログラム内容】
コマンドライン引数で入力した数字に3桁区切りを表示するプログラムを作成してください。なお、コマンドライン引数には数字が必ず1つ入力される前提で作成してください。(数字でないデータが入力される、または入力されないなどのケースは考えなくていい)
1 2 3 4 5 6 7 8 |
class Exam27{ public static void main(String[] args){ int number = Integer.parseInt(args[0]); //以下にプログラムを記述 } } |
※ヒントはあくまでも一例です。
- 繰り返し処理を行いますが、回数は決まっていないため、whileでループさせます
- 繰り返しの条件はnumberが0より大きいときとなります
- numberと10を剰余する
- その余りはString型の変数を用意し、連結させていきます
- numberを10で割り、その結果をnumberに代入します
上記方法で、数値をStringの変数に格納ができたら、以下を追加して桁区切りができるようにします
- 現在の桁を把握するためのカウンターを用意しましょう
- カウンターを利用して3桁ごとという条件分岐を行います
- 3桁ごとに文字列で”,”を上で利用している文字列に連結させます
- ただし4桁の時は,123とならないよう条件に注意しましょう
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
class Exam27{ public static void main(String[] args){ int number = Integer.parseInt(args[0]); int ketaCount = 1; String format = ""; //【】の中をプログラムに変更してください while(【numberが0より大きい】){ format = (【numberと10を剰余】) + format; 【numberと10を割りnumberに代入】; if(ketaCount % 3 == 0 && number > 0) format = "," + format; ketaCount++; } System.out.println(format); } } |
実行結果
C:\work>javac Exam27.java
C:\work>java Exam27 123
123
C:\work>java Exam27 1234
1,234
C:\work>java Exam27 12345
12,345
C:\work>java Exam27 123456
123,456
C:\work>java Exam27 1234567
1,234,567
【Java】総合練習問題 進数変換プログラム
以下の「プログラム内容」「実行結果」を確認して、プログラムを完成させてください。workフォルダ内に「Exam28.java」で保存してください。
保存後、コンパイルおよび実行を行ってください。
【プログラム内容】
コマンドライン引数で入力した数字(10進数)を2進数に変換し表示するプログラムを作成してください。なお、コマンドライン引数には数字が必ず1つ入力されることを前提で作成してください。(数字でないデータが入力される、または入力されないなどのケースは考えなくていい)
1 2 3 4 5 6 7 8 |
class Exam28{ public static void main(String[] args){ int number = Integer.parseInt(args[0]); //2進数に変換して表示させるプログラムを記述する } } |
※ヒントはあくまでも一例です。
- 2進数の数値はStringで表現する方が楽
- 繰り返しの条件はnumberが0より大きいときとなります
- numberと2を剰余する
- その余りはString型の変数を用意し、連結させていきます
- numberを2で割り、その結果をnumberに代入します
実行結果
C:\work>javac Exam28.java
C:\work>java Exam28 4
100
C:\work>java Exam28 5
101
C:\work>java Exam28 6
110
C:\work>java Exam28 7
111
【Java】総合練習問題 つるかめ算プログラム
以下の「プログラム内容」「実行結果」を確認して、プログラムを完成させてください。workフォルダ内に「Exam29.java」で保存してください。
保存後、コンパイルおよび実行を行ってください。
【プログラム内容】
ツル(足が2本)とカメ(足が4本)が全部で10匹おり、足を合計すると30本です。ツルとカメはそれぞれ何匹になるでしょうか?ただし、ツルとカメはそれぞれ1匹以上いるものとします。
答え:ツルが5匹、カメが5匹
なお、コマンドライン引数には数字が必ず2つ「ツルとカメの足の数 ツルとカメの数」が入力されることを前提で作成されています。(数字でないデータが入力される、または入力されないなどのケースは考えなくていいものとしています)
また、「ツルの足+カメの足=12」「ツルの数+カメの数=3」のような場合は数が合わないため、何も表示されません。
※「ツル1匹+カメ2匹」「ツル2匹+カメ1匹」の2つが考えられますが、どちらも12本には満たない
上記、つるかめ算をプログラムに落とし込むと以下のようになります。まるつき数字の部分を埋めてプログラムを完成させてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
class Exam29{ public static void main(String[] args){ //ツルの足とカメの足を合計した数値 int foot = Integer.parseInt(args[0]); //ツルの数とカメの数を合計した数値 int num = Integer.parseInt(args[1]); //iをカメの数としてループを回す for(int i = 1; i < num; i++){ int kame_foot = ①; int turu_foot = ②; if(foot == (③)){ System.out.print("ツル=" + (num - i)); System.out.println(",カメ=" + i); } } } } |
- ①はカメの足を計算して代入に利用します
- ②はツルの足を計算して代入に利用します
- ③はカメの足とツルの足を合計します
実行結果
C:\work>javac Exam29.java
C:\work>java Exam29 30 6
C:\work>java Exam29 30 10
ツル=5,カメ=5
C:\work>java Exam29 30 8
ツル=1,カメ=7
C:\work>java Exam29 12 3
C:\work>java Exam29 12 4
ツル=2,カメ=2
※実行結果でコマンドライン引数が【12 3】【30 6】の場合は「ツルの足+カメの足」と「ツルの数+カメの数」が合わないため、何も表示されません。
おまけ問題
ここからの練習問題はおまけの問題です。興味がある人は解いてみてください。
配列内のデータを小さい順に並び替える(ソートプログラム)
以下のプログラムは配列内の不規則な並びのデータを小さい順に並び替えるプログラムです。xxxxとなっている部分を埋めて「Exam30.java」を完成させてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
class Exam30{ public static void main(String[] args){ //配列の用意 int[] array = {5, 30, 4, 15, 9, 20, 1, 8, 11}; //上記の配列を小さい順(昇順)に並び替えてください for(xxxx){ for(xxxx){ int tmp = 0; if(xxxx){ tmp = array[i]; array[i] = array[j]; array[j] = tmp; } } } //並び替え後の表示 } } |
実行結果
C:\work>javac Exam30.java
C:\work>java Exam30
1 4 5 8 9 11 15 20 30
ユークリッドの互除法プログラミング
以下のように実行するとユークリッドの互除法を用いて最大公約数を表示するプログラム「Exam31.java」を作成してください。
なお、コマンドライン引数には数字が必ず2つ入力される前提で作成してください。(数字でないデータが入力される、または入力されないなどのケースは考えなくていい)
実行結果
C:\work>java Exam31 1078 1029
49
C:\work>java Exam31 36 27
9
C:\work>java Exam31 27 36
9
乱数生成プログラミング
以下のように実行すると線形合同法を用いて疑似乱数を表示するプログラム「Exam32.java」を作成してください。
線形合同法の漸化式をプログラムの式に落とし込み、繰り返し処理で乱数を表示します。
実行結果は、漸化式に当てはめる数値を以下のようにしています。
A = 25、B = 5、X = 9、M = 16
実行結果
C:\work>javac Exam32.java
C:\work>java Exam32
6 11 8 13 10 15 12 1 14 3 0 5 2 7 4 9 6 11 8 13
進数変換プログラム
2018-07-12 問題追加
以下の「条件」「実行結果」を確認して、プログラムを完成させてください。2進数から10進数への数値変換を行い表示するプログラム「Exam33.java」をworkフォルダ内に作成してください。保存後、コンパイルおよび実行を行ってください。
条件
- 数値はコマンドラインから入力されます
- 1で入力したコマンドライン引数はint型へ変換します
- 2で変換した数値は2進数として扱います(本当は10進数だが、2進数の数値と仮定して扱う)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
class Exam33{ public static void main(String[] args){ //コマンドライン引数をint型へ変換(入力されるのは2進数) int binary_number = Integer.parseInt(args[0]); //10進数の数値保存用の変数 int number = 0; /* 変換を行う処理 */ //出力処理 System.out.println(number); } } |
実行結果
C:\work>javac Exam33.java
C:\work>java Exam33 101
5
C:\work>java Exam33 1010
10
C:\work>java Exam33 1111
15
C:\work>java Exam33 11110000
240