時系列(講義で解説した順)になっていますが、難易度が前後しますので、難易度順にチャレンジしても大丈夫です。
難易度:1
このコードを写経して、書いている内容が理解できる。 書き間違い、写し間違いでエラーが起こったときに、VSCodeのチカラを借りたり、お手本のコードと見比べて修正できる。
上記コードの処理の流れを理解した上で、その流れに沿って自分でコードが書ける。
エラーが起こったときに、ある程度はVSCodeのチカラを借りて修正できる。
難易度:5
この時点でのコードを写経して、書いている内容が理解できる。
列挙型(enum)の特徴が言える。
特にMain.java
の13〜25行目とJankenHand.java
のコードについて、何をしているかを言える。
JankenHand
のインスタンスは、3つの固定インスタンスしかなく、それぞれ「グーを表すJankenHand.Rock
」「チョキを表すJankenHand.Scissors
」「パーを表すJankenHand.Paper
」であると理解できている。
JankenHand
のコードを見て、toString
メソッドが、Object
クラスのtoString
メソッドを「オーバーライド」していることが理解できる。
JankenHand
のdisplayHand
メソッドとtoString
メソッドは、同じ処理をして同じものを返しているが、この2つの違いをmain
メソッド内のSystem.out.println
やSystem.out.print
で使うときの観点から説明できる。
toString
メソッドをオーバーライドするメリットが理解できている。
適切にObject
クラスのtoString
メソッドをオーバーライドするコードが自分で書ける。
難易度:6
この時点でのコードを写経して、書いている内容がある程度読める。
Math
クラスのstatic
メソッドであるmax
を呼び出す(使う)方法がわかる。
JankenHand
のstatic
メソッドであるfromInt
を呼び出す(使う)方法がわかる。
JankenHand
のfromInt
メソッドが引数の数字に応じて、「グー」か「チョキ」か「パー」のインスタンスを返すことが理解できる。
JankenHand player = JankenHand.fromInt(2);
というコードで、player
という変数に、「パー」を表すインスタンスである「JankenHand.Paper」が代入されていることがわかる。
写経で流れを理解した上で、Main.java
の11行目や18行目が自分で書ける。
JankenHand
のfromInt
メソッドがstatic
でなければならない理由が説明できる。
逆に、fromInt
メソッドがstatic
でないコード(fromInt
がstatic
でない)を実際に書き、どの時点でどのような問題になるか確認できる。
難易度:3
この時点でのコードを写経して、書いている内容がある程度読める。
写経で流れを理解した上で、Main.java
の22〜28行目が自分で書ける。
写経で流れを理解した上で、自力でJankenHand
にwinTo
メソッドとloseTo
メソッドを実装できる。
STEP.1 → 難易度:2
STEP.2以降 → 難易度:4
この時点でのコードを写経して、書いている内容がある程度読める。 書き間違い、写し間違いでエラーが起こったときに、VSCodeのチカラを借りたり、お手本のコードと見比べて修正できる。
マジックナンバーとは何か、マジックナンバーを使ってはいけない理由を説明できる。
マジックナンバーを使わないために、final
をつけた定数(JANKEN_COUNT)を使うメリットを説明できる。
JANKEN_COUNT
がstatic
になっている理由を、main
メソッドから使用することと関連付けて説明できる。
STEP.1、STEP.2 → 難易度:7
STEP.3 → 難易度:8
この時点でのコードを写経して、書いている内容がある程度読める。
nextHand
メソッドを持つJankenStrategy
インターフェイスを書きなさい。
nextHand
メソッドは、パッケージの外部からアクセス可能で、引数は無し、返り値の型はJankenHand型である。
という指示を受けて、JankenStrategy.java
が書ける。
また、
JankenStrategy
を実装するFixedHandStrategy
を書きなさい。nextHand
メソッドは、固定値としてJankenHand.Rock
を返すものとする。
という指示を受けて、FixedHandStrategy.java
が書ける。
Pc.java
の7行目、8行目が理解できる。
サンプルコードではPCが次の手を出す戦略として、RandomStrategy
を使っているが、FixedHandStrategy
を使うように書き換えることができる。
このサンプルコードの状態から、trackの5章終わりの状態まで、理解しながら書き換えることができる。
Pc
クラスのフィールドとしてstrategy
を定義し、そのsetter
を書くことができる。Pc
クラスのnextHand
メソッドを、上記の変更に合わせて書き換えることができる。FixedHandStrategy
に「どの手で固定するか」を表すhand
フィールドを定義し、その初期化を行うコンストラクタ(引数に「固定する手」をとる)が書ける。FixedHandStrategy
クラスのnextHand
メソッドを、上記の変更に合わせて書き換えることができる。main
メソッド内で、Pc
クラスのインスタンスpc
に対して、任意の戦略を設定するコードが書ける。
STEP.1 〜 STEP.3 → 難易度:9
STEP.4 → 難易度 10
この時点でのコードを写経して、書いている内容がある程度読める。
JankenStrategy
インターフェイスにprevHands
メソッドを追加しなさい。
prevHands
メソッドは、パッケージの外部からアクセス可能で、返り値はなく、引数にJankenHand型のmyHandとenemyHandをとる。
prevHands
メソッドは、実装先で必ずしもオーバーライドしなくてもよく、オーバーライドされなかったときは、何もしないように定義しておく。
という指示を受けて、JankenStrategy.java
に正しいコードを追記できる。
RandomStrategy
やFixedHandStrategy
がprevHands
メソッドをオーバーライドしなくても良いことを理解し、その場合のprevHands
メソッドの挙動を説明できる。
ChottoKashikoiStrategy.java
に書いてあるコードを理解できる。
trackの6章終わりの状態(サンプルコードの状態)までを、ある程度理解しながら自力で完成させることができる。
prevHands
メソッドが実質ChottoKashikoiStrategy
でしか実装されないにもかかわらず、独自のメソッドとしてではなく、JankenStrategy
のメソッドとして定義しなければならない理由を、main
メソッドやPc
クラスでどのように使用するかという観点から説明できる。