0.クラスメソッドをインスタンスメソッドにする
前回の「6.メソッドのいろいろ」で作成したクラスメソッドを全てインスタンスメソッドに書き換えよ。
例えば、「1.引数あり、戻り値あり」であれば以下のようになる。
1 2 3 4 5 6 7 8 9 10 11 12 |
public class Practice { public double getRectangularArea(double width, double height) { return width * height; } public static void main(String[] args) { Practice p1 = new Practice(); double num1 = p1.getRectangularArea(10, 100); System.out.println(num1); } } |
以下のプログラムはチームメンバー全員の自己紹介をするためのプログラムです。
1.インスタンスメソッド
以下の NewComer (新入社員)クラスを使用(コピー)して、プログラムを作成しなさい。
※以降の問はこのクラスに追加変更を加えること
※題意から外れた部分はコメントアウトしておくこと
※途中経過をファイルとして残す必要はない
1 2 3 4 5 6 7 8 9 10 11 |
class NewComer{ private String name; public void setName( String nm ){ name = nm; } public void showProfile() { System.out.println( "私の名前は、" + name + "です。" ); } } |
(1)NewComer クラスにmainメソッドを追加しインスタンスを生成する。
※このように自作クラスにmainメソッドを書くと、クラスをすぐに実行して動作が確認でき便利です。
(2)setName メソッドであなたの名前を設定する。
(3)showProfile メソッドであなたの名前を表示する。
2.インスタンスメソッドの作成と変更
前問の NewComer クラスに、次の内容を追加しなさい。
(1)年齢を保持する int 型のメンバー変数を追加する。
(2)年齢を設定するメンバー・メソッド、setAgeを追加する。
(3)mainメソッド内で自分の年齢(サバ読み可)を設定する。
(4)showProfile メソッドで名前、年齢を表示するようにする。
(5)インスタンスを作成し名前、年齢を設定、プロフィールを表示する。
出力例 私の名前は今井です。 |
3.オブジェクト配列とメソッド
前問の NewComer クラスを使用して次のプログラムを作成しなさい。
(1)オブジェクト配列を使い、メンバー全員分のNewComer クラスのインスタンスを作成しなさい。
(2)すべてのインスタンスに名前、年齢を設定する。
(3)すべてのインスタンスのプロフィールを表示する。
出力例 私の名前は今井です。 |
4.インスタンスメソッドの利用
前問の NewComer クラスに、次の内容を追加しなさい。
(1)趣味を保持するメンバー変数( hobby:String 型)を追加する。
(2)名前、年齢、趣味を設定する引数を持つコンストラクタを追加する。
(3)ShowProfile メソッドを名前、年齢、趣味を表示するように変更する。
(4)一つ年をとるgetOlderメソッド(引数無し、戻り値年齢)を追加する。
(5)NewComer クラスのインスタンスをチームメンバー数だけ作成する。
(6)全員のプロフィールを表示する。
(7)getOlderメソッドで全員1歳年をとらせてから同様にプロフィールを表示する。
(ここでは戻り値を使っていない、戻り値を捨てていることに注意)
5.メソッドの引数や戻り値がオブジェクト配列
ここまでで作成したクラスが以下の通りだったとします。
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 41 42 43 44 45 46 47 48 |
class NewComer { String name; int age; String hobby; public NewComer(String name, int age, String hobby) { this.name = name; this.age = age; this.hobby = hobby; } public void setName(String nm) { name = nm; } public void showProfile() { System.out.println("私の名前は、" + name + "です。"); System.out.println("私の年齢は、" + age + "歳です。"); System.out.println("私の趣味は、" + hobby + "です。"); System.out.println("---------------------"); } public void setAge(int age) { this.age = age; } public int getOlder() { return this.age++; } public static void main(String[] args) { NewComer n1 = new NewComer("今井", 40, "釣り"); NewComer n2 = new NewComer("山田", 35, "マラソン"); NewComer n3 = new NewComer("田渕", 25, "読書"); NewComer[] t1 = {n1, n2, n3}; for (NewComer n : t1) { n.showProfile(); } for (NewComer n : t1) { n.getOlder(); n.showProfile(); } } } |
このとき複数のNewComerを一つのチームにまとめるTeamクラスを作成しなさい
(1)フィールドはprivateなNewComerのオブジェクト配列newcomers。
(2)コンストラクタはなし(デフォルト・コンストラクタ)。
(3)NewComerのオブジェクト配列を返すパブリックなgetTeamメソッド(引数なし)。
(4)NewComerのオブジェクト配列をフィールドに設定するパブリックなsetTeamメソッド(引数はNewComerのオブジェクト配列newComers)。
以下は上記のmainメソッドに付け加えること。
(5)自分たちのチームをTeamクラスのインスタンス変数で参照しなさい。(変数名の例:teamA)
(6)自分たちのチームをsetTeam()する。
(7)自分たちのチームの2番目の人の趣味だけをnewComersフィールドに直接アクセスして表示するコードを書きたいとします。以下⑥を埋めなさい。
1 |
System.out.println(teamA.⑥); |
(8)NewComerクラスのhobbyフィールドをprivateにしてから同クラスに適切なメソッドを書き加え(7)と同じ結果が得られるよう以下⑦を埋めてください。
1 |
System.out.println(teamA.⑦); |
6.thisの使い方
漫才をする学生のプログラムのプロトタイプである。
以下のようなアウトプットを表示したい。
ボケます to 山崎 from 今井ボケます to 今井 from 山崎ボケます to 今井 from 今井なんでやねん! 今井
つまり2人の生徒が互いにボケを交わした後、自分でボケて自分自身に突っ込みを入れたいのである。
問:以下のコードの①~④を埋めなさい。
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 |
public class Student { String name; public Student(String name) { ①.name = name; } public void boke(Student st) { System.out.println("ボケます from " + ②.name + " to " + st.name); } public void jikoTsukomi(Student st) { boke(③); System.out.println("なんでやねん! " + ④.name); } public static void main(String[] args) { Student s1 = new Student("今井"); Student s2 = new Student("山崎"); s1.boke(s2); s2.boke(s1); System.out.println(""); s1.jikoTsukomi(s1); } } |
7.インスタンス変数をクラスメソッドから参照する
次のコードを実行するとどうなりますか?
また、それはなぜですか?
1 2 3 4 5 6 7 8 9 |
public class Sample { int num1 = 10; int num2 = 20; public static void main(String[] args) { System.out.println(num1 + num2); } } |
8.オリジナル問題作成