この総合演習問題では第4章の総まとめ復習問題となります。
問題はどんどん難しくなっていきます。
前半はメソッドやオーバーロード、コンストラクタ等の問題。
後半では前半の内容にプラスして、継承やオーバーライド、インタフェースと実装等の問題となっています。
2018/11/13 問題を追加
もくじ
フィールドとメソッド
examフォルダ内にファイルやフォルダは保存してください。(階層→c:\work\exam)
ここからの問題は第4章までの様々な記述を利用してプログラムを作成していきます。
極力、APIなどのすでに作られたプログラムは利用せずに、この練習問題は一部を除き基本構文のみで作成してください。
【Java】総合練習問題 フィールドとメソッド基礎
以下の「プログラム内容」「実行結果」を確認して、プログラムを完成させてください。examフォルダ内に「Exam1011.java」「Dog.java」で保存してください。
保存後、コンパイルおよび実行を行ってください。
【Dogクラス プログラム内容】
指示1 Dogクラスのメンバ指示
クラス名 | ||||
---|---|---|---|---|
Dog | ||||
アクセス修飾子 | フィールド名 | 型 | 初期値 | |
private | name | String | なし(宣言のみ) | |
private | type | String | なし(宣言のみ) | |
private | color | String | なし(宣言のみ) | |
アクセス修飾子 | メソッド名 | 戻り値の型 | 引数 | 処理内容 |
なし | setName | void | String n | 引数の値をnameに設定する |
なし | setType | void | String t | 引数の値をtypeに設定する (ただし条件あり※1) |
なし | setColor | void | String c | 引数の値をtypeに設定する (ただし条件あり※2) |
なし | info | void | なし | name、type、colorに設定されているデータを表示する※3 |
※1 条件は指示2参照
※2 条件は指示3参照
※3 表示は実行結果参照
指示2 setType()内の条件
typeに設定できる犬種は現在のところ「プードル」「チワワ」「プレーリードッグ」「ブルドッグ」とします。それ以外の犬種が引数で指定された場合「雑種」とします。
指示3 setColor()内の条件
colorに設定できる色は現在のところ「白」「黒」「茶」とします。それ以外の色が指定されてた場合は「茶」とします。
【Exam1011クラス プログラム内容】
コマンドライン引数から入力される「名前」「犬種」「色」を作成したインスタンスにセットします。また、データセット後は表示を行います。コメント下にプログラムを追加して実行結果のように表示してください。
1 2 3 4 5 6 7 8 9 10 11 12 |
class Exam1011{ public static void main(String[] args){ /* Dogクラスからインスタンスを生成してください インスタンスにはコマンドライン引数[名前 犬種 色] から取得した各データをセットします また、セットされたデータを表示してください */ } } |
実行結果
C:\work\exam>javac Exam1011.java
C:\work\exam>java Exam1011 太郎 プードル 白
犬の名前は太郎です。
犬種はプードルです。
色は白です。
C:\work\exam>java Exam1011 太郎 ゴールデンレトリバー 茶
犬の名前は太郎です。
犬種は雑種です。
色は茶です。
※実行させる際、名前と犬種と色の間は全角スペースではなく半角スペースを入力するように気を付けましょう
コンストラクタとオーバーロード
【Java】総合練習問題 オーバーロード
以下の「プログラム内容」「実行結果」を確認して、プログラムを完成させてください。examフォルダ内に「Exam1012.java」「ThanksConverter.java」で保存してください。
保存後、コンパイルおよび実行を行ってください。
【ThanksConverterクラス プログラム内容】
指示1 ThanksConverterクラスのメンバ指示
クラス名 | ||||
---|---|---|---|---|
ThanksConverter | ||||
アクセス修飾子 | フィールド名 | 型 | 初期値 | |
private | countries | String[] | 国名を初期値で格納※データは表下に記載 | |
private | thanks_data | String[] | 国ごとの感謝の言葉を初期値で格納※データは表下に記載 | |
private | kana_data | String[] | 国ごとの感謝の言葉(カタカナ)を初期値で格納※データは表下に記載 | |
private | cursor | int | なし(宣言のみ)※現在選択されている国のインデックスを格納 | |
アクセス修飾子 | メソッド名 | 戻り値の型 | 引数 | 処理内容 |
public | convert | String | String country | 引数で取得した国名を元に、対応するthanks_data配列のデータを戻り値で返す。 |
public | convert | String | String country, boolean isKana | 第一引数で取得した国名を元に、対応する配列のデータを戻り値で返す。
ただし、第二引数の値がtrueの場合は、kana_data配列のデータを、falseの場合はthanks_data配列のデータを返す。 |
※該当する国がない場合の戻り値は”該当なし”としてください
国名
“usa”,”spa”,”fra”,”ger”,”ita”,”por”
国ごとの感謝の言葉
“Thank you”,”Gracias”,”Merci”,”Danke schon”,”Grazie”,”Obrigado”
国ごとの感謝の言葉(カタカナ)
“サンキュー “,”グラシアス”,”メルシー”,” ダンケ・シェーン”,”グラッツィエ”,”オブリガード”
【Exam1012クラス プログラム内容】
ThanksConverterクラスを利用してプログラムを実行します。コメント下にプログラムを追加して実行結果のように表示してください。
1 2 3 4 5 6 7 8 9 10 11 12 |
class Exam1012{ public static void main(String[] args){ /* ThanksConverterクラスからインスタンスを生成してください 生成したインスタンスを利用してイタリアのありがとうを表示してください。 表示の方法は実行結果を参考にしてください。 */ System.out.println("イタリアのありがとう"); } } |
実行結果
C:\work\exam>javac Exam1012.java
C:\work\exam>java Exam1012
イタリアのありがとう
Grazie(グラッツィエ)
下記のヒントは一例です。どのように記述してよいかわからない人はクリックして確認してください。
xxxxxの部分は右のコメントを見て埋めてください。
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 ThanksConverter{ private String[] countries = {"usa","spa","fra","ger","ita","por"}; private String[] thanks_data = {"Thank you","Gracias","Merci","Danke schon","Grazie","Obrigado"}; private String[] kana_data = {"サンキュー ","グラシアス","メルシー"," ダンケ・シェーン","グラッツィエ","オブリガード"}; private int cursor ; public String convert(String country){ String thanks = "該当なし"; for(xxxxxxx){ //国の分だけループ if(xxxxxxx){ //引数の値と配列内の値を比較 thanks = thanks_data[i]; //配列の値を格納 cursor = i; //選択された国のインデックスを格納 break; } } return thanks; } public String convert(String country, boolean isKana){ String thanks = xxxxxx; //引数一つのconvert()メソッドを呼び出し if(xxxxxx){ //isKanaがtrueの際にカタカナに変更 thanks = kana_data[cursor]; } return thanks; } } |
【Java】総合練習問題 コンストラクタ
以下の「プログラム内容」「実行結果」を確認して、プログラムを完成させてください。examフォルダ内に「Exam1013.java」「Dog2.java」で保存してください。
保存後、コンパイルおよび実行を行ってください。
【Dog2クラス プログラム内容】
Dog2クラスは上で作成したDogクラスをコピーして修正します。Dog2クラスはDogと違い「名前」「犬種」「色」はコンストラクタで設定し、メソッドでは設定できないように変更します。
もともとあったDogクラスで設定されているメソッドは削除してください。
指示1 Dog2クラスのメンバ指示
クラス名 | ||||
---|---|---|---|---|
Dog2 | ||||
アクセス修飾子 | フィールド名 | 型 | 初期値 | |
private | name | String | なし(宣言のみ) | |
private | type | String | なし(宣言のみ) | |
private | color | String | なし(宣言のみ) | |
アクセス修飾子 | 引数 | コンストラクタの処理内容 | ||
public | String n, String t, String c | 「名前」「犬種」「色」をフィールドに設定するコンストラクタ※1 | ||
アクセス修飾子 | メソッド名 | 戻り値の型 | 引数 | 処理内容 |
public | info | void | なし | name、type、colorに設定されているデータを表示する※2 |
※1 条件は指示2参照
※2 表示は実行結果参照(変更なし)
指示2 コンストラクタ内の条件
typeに設定できる犬種は現在のところ「プードル」「チワワ」「プレーリードッグ」「ブルドッグ」とします。それ以外の犬種が引数で指定された場合「雑種」とします。
colorに設定できる色は現在のところ「白」「黒」「茶」とします。それ以外の色が指定されてた場合は「茶」とします。
【Exam1013クラス プログラム内容】
コマンドライン引数から入力される「名前」「犬種」「色」を作成したインスタンスにセットします。また、データセット後は表示を行います。コメント下にプログラムを追加して実行結果のように表示してください。
1 2 3 4 5 6 7 8 9 10 11 |
class Exam1013{ public static void main(String[] args){ /* Dog2クラスからインスタンスを生成する際にデータをセットします セットするデータはコマンドライン引数のデータを利用します また、セットされたデータを表示してください */ } } |
実行結果
C:\work\exam>javac Exam1013.java
C:\work\exam>java Exam1013 太郎 プードル 白
犬の名前は太郎です。
犬種はプードルです。
色は白です。
C:\work\exam>java Exam1013 太郎 ゴールデンレトリバー 茶
犬の名前は太郎です。
犬種は雑種です。
色は茶です。
※実行させる際、名前と犬種と色の間は全角スペースではなく半角スペースを入力するように気を付けましょう
【Java】総合練習問題 コンストラクタとオーバーロード
以下の「プログラム内容」「実行結果」を確認して、プログラムを完成させてください。examフォルダ内に「Exam1014.java」「Dog3.java」で保存してください。
保存後、コンパイルおよび実行を行ってください。
【Dog3クラス プログラム内容】
Dog3クラスは上で作成したDog2クラスをコピーして修正します。Dog3クラスはDog2と違い「名前」「犬種」「色」はコンストラクタで設定し、メソッドでは設定できないように変更します。
Dog2と違い、コンストラクタを複数定義(オーバーロード)します。どのようなコンストラクタを作成するかは以下の表を参考にしてください。
指示1 Dog3クラスのメンバ指示
クラス名 | ||||
---|---|---|---|---|
Dog3 | ||||
アクセス修飾子 | フィールド名 | 型 | 初期値 | |
private | name | String | なし(宣言のみ) | |
private | type | String | なし(宣言のみ) | |
private | color | String | なし(宣言のみ) | |
アクセス修飾子 | 引数 | コンストラクタの処理内容 | ||
public | String n, String t, String c | 「名前」「犬種」「色」をフィールドに設定するコンストラクタ※1 | ||
public | String n | 「名前」をフィールドに設定するコンストラクタ※1 「犬種」は雑種、「色」は茶をフィールドに設定する |
||
public | String n,String t | 「名前」「犬種」をフィールドに設定するコンストラクタ※1 「色」は茶をフィールドに設定する |
||
アクセス修飾子 | メソッド名 | 戻り値の型 | 引数 | 処理内容 |
public | info | void | なし | name、type、colorに設定されているデータを表示する※2 |
※1 条件は指示2参照
※2 表示は実行結果参照(変更なし)
指示2 コンストラクタ内の条件
typeに設定できる犬種は現在のところ「プードル」「チワワ」「プレーリードッグ」「ブルドッグ」とします。それ以外の犬種が引数で指定された場合「雑種」とします。
colorに設定できる色は現在のところ「白」「黒」「茶」とします。それ以外の色が指定されてた場合は「茶」とします。
※引数を2つ指定するコンストラクタと、引数を1つ指定するコンストラクタは、引数3つのコンストラクタを内部で利用すると処理が少なくて済みます。(参考)
下記のヒントは一例です。どのように記述してよいかわからない人はクリックして確認してください。
xxxxxの部分は右のコメントを見て埋めてください。
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 32 33 34 35 36 37 38 39 40 |
class Dog3{ private String name ; private String type ; private String color; //Dog2のコンストラクタを名前を変えてそのまま利用 public Dog3(String n,String t, String c){ name = n; String[] type_array = {"プードル","チワワ","プレーリードッグ","ブルドッグ"}; String type_tmp = "雑種"; for(int i = 0; i < type_array.length; i++){ if(t.equals(type_array[i])){ type_tmp = t; } } type = type_tmp; String[] color_array = {"白","黒","茶"}; String color_tmp = "茶"; for(int i = 0; i < color_array.length; i++){ if(c.equals(color_array[i])){ color_tmp = c; } } color = color_tmp; } public xxxx(xxxxxxx){ //引数1つのコンストラクタを定義 this(xxx,"雑種","茶"); } public xxxx(xxxxxxx, xxxxxxx){//引数2つのコンストラクタを定義 this(xxx,xxx,"茶"); } void info(){ System.out.println("犬の名前は" + name + "です。"); System.out.println("犬種は" + type + "です。"); System.out.println("色は" + color + "です。"); } } |
【Exam1014クラス プログラム内容】
コマンドライン引数から入力される「名前」「犬種」「色」を作成したインスタンスにセットします。また、データセット後は表示を行います。コメント下にプログラムを追加して実行結果のように表示してください。
1 2 3 4 5 6 7 8 9 10 11 12 |
class Exam1014{ public static void main(String[] args){ /* Dog3クラスからインスタンスを生成する際にデータをセットします セットするデータはコマンドライン引数のデータを利用します 但し、以下のコマンドライン引数の数に応じてデータをセットします コマンドライン引数が3つ:名前と犬種と色 コマンドライン引数が2つ:名前と犬種 コマンドライン引数が1つ:名前のみ */ } |
実行結果
C:\work\exam>javac Exam1014.java
C:\work\exam>java Exam1014 太郎
犬の名前は太郎です。
犬種は雑種です。
色は茶です。
C:\work\exam>java Exam1014 太郎 プレーリードッグ
犬の名前は太郎です。
犬種はプレーリードッグです。
色は茶です。
C:\work\exam>java Exam1014 太郎 プレーリードッグ 白
犬の名前は太郎です。
犬種はプレーリードッグです。
色は白です。
※実行させる際、名前と犬種と色の間は全角スペースではなく半角スペースを入力するように気を付けましょう