こんにちは。ECF Tech
ブログ担当 Michiharu.Tです。
Javaプログラミング向け練習問題、オブジェクト指向プログラミングの第2回です。今回のテーマはコンストラクタです。コンストラクタは動作仕様が複雑な部分もありますが、今回は基本的な内容になっています。ぜひ、学習にお役立てください。
一般的なJavaの学習順序に沿ったテーマの一覧(※随時追加)は、こちらのリンクよりご確認頂けます。
Javaのトピックスです。主に初心者向けにプログラミング学習ネタを提供していきます。
解説動画
2023/02/18 解説動画を掲載しました。
Java練習問題(コンストラクタ)
問題編
Q001
問題
下のItemクラスの仕様に基づいて、Item.javaを作成してください。
提供コードのMain.javaをItem.javaと同じフォルダ内に保存して動作確認し、実行結果が得られることを確認してください。
(仕様)
Itemクラスは店の商品を扱うクラスです。下記に基づいて作成をしてください。
- 次のメンバ変数を作成する
- 商品名を表すnameをString型で宣言する
- 価格を表すpriceをint型で宣言する
- コンストラクタを作成する
- 引数:
- name:String型
- price:int型
- 処理内容:引数で与えられた値を、同名のメンバ変数に代入する。
- 引数:
- displayメソッドを作成する
- 引数:なし
- 戻り値:なし
- 処理内容:インスタンスの内容を表示する。実行結果を参考にして作成。
提供コード
(Main.java)
public class Main{ public static void main(String[] args){ Item i1 = new Item("コーヒー", 120); Item i2 = new Item("オレンジジュース", 150); i1.display(); i2.display(); } }
実行結果
コーヒー:120円 オレンジジュース:150円
(解答はこちら)
Q002
問題
下のShopクラスの仕様に基づいて、Shop.javaを作成してください。
提供コードのMain.javaをShop.javaと同じフォルダ内に保存して動作確認し、実行結果が得られることを確認してください。
(仕様)
Shopクラスはお店を扱うクラスです。下記に基づいて作成をしてください。
- メンバ変数を作成する
- 店名を表すnameをString型で宣言する
- 売上高を表すsalesをint型で宣言する
- コンストラクタ①を作成する
- 引数:
- name:String型
- sales:int型
- 処理内容:引数で与えられた値を、同名のメンバ変数に代入する。
- 引数:
- コンストラクタ②を作成する(2つ目)
- 引数:なし
- 処理内容:コンストラクタ①を呼び出す。第1引数には
"出店予定"
の文字列を渡し、第2引数には0
を渡す。
- displayメソッドを作成する
- 引数:なし
- 戻り値:なし
- 処理内容:インスタンスの内容を表示する。実行結果を参考にして作成。
提供コード
Main.java
public class Main { public static void main(String[] args) { Shop s1 = new Shop("A町店", 150000); Shop s2 = new Shop("B公園前店", 180000); Shop s3 = new Shop(); s1.display(); s2.display(); s3.display(); } }
実行結果
A町店:売上高 150000円 B公園前店:売上高 180000円 出店予定:売上高 0円
(解答はこちら)
Q003
問題
下のStudentクラスの仕様に基づいて、Student.javaを作成してください。
提供コードのMain.javaをStudent.javaと同じフォルダ内に保存して動作確認し、実行結果が得られることを確認してください。
(仕様)
Studentクラスは生徒の情報を扱うクラスです。下記に基づいて作成をしてください。
- メンバ変数を作成する
- 名前を表すnameをString型で宣言する
- 国語の得点を表すkokuをint型で宣言する
- 数学の得点を表すsuをint型で宣言する
- 英語の得点を表すeiをint型で宣言する
- コンストラクタ①を作成する
- 引数:
- name:String型
- koku:int型
- su:int型
- ei:int型
- 処理内容:引数で与えられた値を、同名のメンバ変数に代入する。
- 引数:
- コンストラクタ②を作成する(2つ目)
- 引数:name:String型
- 処理内容:コンストラクタ①を呼び出す。第1引数は、本コンストラクタの第1引数をそのまま渡す。それ以外の引数にはすべて
0
を渡す。
- showメソッドを作成する
- 引数:なし
- 戻り値:なし
- 処理内容:インスタンスの内容を表示する。実行結果を参考にして作成。
Mainクラスのmainメソッドでは次の処理を行なっています。参考にしながら提供コードのコメント部分に追記してください。
(mainメソッドの動作)
- Student型の配列
students
を宣言する - 配列の各要素に次の3名の成績をインスタンスとして代入する
- 名前:タロウ 国語:80点,数学:75点,英語:90点
- 名前:ハナコ 国語:90点,数学:70点,英語:80点
- 名前:ジロウ 欠席のため未受験。各科目0点
- 「成績表」と表示する
- 配列の各要素が指すインスタンスのshowメソッドを呼び出し、3名の得点を表示する。
提供コード
Main.java
public class Main { public static void main(String[] args) { Student[] students = new Student[3]; //ここにプログラムを書きます。 System.out.println("成績表"); for (int i = 0; i < students.length; i++) { //ここにプログラムを書きます。 } } }
実行結果
成績表 タロウ:80,75,90 ハナコ:90,70,80 ジロウ:0,0,0
(解答はこちら)
Q004
問題
下のDaikeiクラスの仕様に基づいて、Daikei.javaを作成してください。
(仕様)
Daikeiクラスは台形を扱うクラスです。下記に基づいて作成をしてください。
- メンバ変数を作成する
- 上底を表すjyoteiをint型で宣言する
- 下底を表すkateiをint型で宣言する
- 高さを表すtakasaをint型で宣言する
- コンストラクタ①を作成する
- 引数:
- jyotei:int型
- katei:int型
- takasa:int型
- 処理内容:引数で与えられた値を、同名のメンバ変数に代入する。
- 引数:
- getMensekiメソッドを作成する
- 引数:なし
- 戻り値:台形の面積(int)
- 処理内容:メンバ変数のjyotei,katei,takasaを使って、面積( (上底+下底)×高さ÷2 )を求めてその値を返す。 ※小数点は切捨て
提供コードのMain.javaをDaikei.javaと同じフォルダに配置します。
Mainクラスのmainメソッドでは次の処理を行なっています。参考にしながら提供コードのコメント部分に追記してください。
(mainメソッドの動作)
- 上底:12、下底:8、高さ:5の台形を表すインスタンスを生成し、変数d1に代入する。
- 上底:8、下底:4、高さ:10の台形を表すインスタンスを生成し、変数d2に代入する。
- d1,d2のgetMensekiメソッドをそれぞれ呼び出し、その戻り値を表示する。
提供コード
Main.java
public class Main { public static void main(String[] args) { //ここにプログラムを書きます。 } }
実行結果
50 60
(解答はこちら)
解答編
それでは解答編です。基本はソースコードのみの提供ですが、ポイントを絞ってコメントで説明を入れております。
Q001
(Item.java)
public class Item { String name; int price; public Item(String name, int price) { this.name = name; this.price = price; } public void display() { System.out.println( this.name + ":" + this.price + "円"); } }
(Main.java)
public class Main{ public static void main(String[] args){ Item i1 = new Item("コーヒー", 120); Item i2 = new Item("オレンジジュース", 150); i1.display(); i2.display(); } }
(問題に戻る)
Q002
(Shop.java)
public class Shop { String name; int sales; //コンストラクタ public Shop(String name, int sales) { this.name = name; this.sales = sales; } //コンストラクタをオーバーロード(複数定義)している public Shop() { this("出店予定", 0); } public void display() { System.out.println(this.name + ":売上高 " + this.sales + "円"); } }
(Main.java)
public class Main { public static void main(String[] args) { Shop s1 = new Shop("A町店", 150000); Shop s2 = new Shop("B公園前店", 180000); Shop s3 = new Shop(); s1.display(); s2.display(); s3.display(); } }
(問題に戻る)
Q003
(Student.java)
public class Student { String name; int koku; int su; int ei; public Student(String name, int koku, int su, int ei) { this.name = name; this.koku = koku; this.su = su; this.ei = ei; } //名前だけを設定し、あとは0点を設定してくれるコンストラクタ public Student(String name) { this(name, 0, 0, 0); } public void show() { System.out.println( name + ":" + koku + "," + su + "," + ei); } }
(Main.java)
public class Main { public static void main(String[] args) { Student[] students = new Student[3]; students[0] = new Student("タロウ", 80, 75, 90); students[1] = new Student("ハナコ", 90, 70, 80); //ジロウは未受験なので、0点を設定するコンストラクタを使用 students[2] = new Student("ジロウ"); System.out.println("成績表"); for (int i = 0; i < students.length; i++) { students[i].show(); } } }
(問題に戻る)
Q004
(Daikei.java)
public class Daikei { int jyotei; int katei; int takasa; public Daikei(int jyotei, int katei, int takasa) { this.jyotei = jyotei; this.katei = katei; this.takasa = takasa; } public int getMenseki() { return (jyotei + katei) * takasa / 2; } }
(Main.java)
public class Main { public static void main(String[] args) { Daikei d1 = new Daikei(12, 8, 5); Daikei d2 = new Daikei(8, 4, 10); System.out.println(d1.getMenseki()); System.out.println(d2.getMenseki()); } }
(問題に戻る)
おわりに
いかがでしたでしょうか。類似の問題が多かったかもしれません。様々な仕様に基づいてクラスやコンストラクタを繰り返し作っていくことで、感覚がつかめてきたら良いと思います。オブジェクト指向編の問題も引き続きご提供していけたらと思います。よろしくお願いします。
合同会社イー・シー・エフでは、子ども向けプログラミングなどの教育講座を実施しています。プログラミング教室の案内や教育教材の情報、また関連するご相談・問い合わせにつきましては下記よりご確認ください。