Git Product home page Git Product logo

janken-sample's Introduction

じゃんけんプログラムを作ろう!

時系列(講義で解説した順)になっていますが、難易度が前後しますので、難易度順にチャレンジしても大丈夫です。

処理の流れが書ける

難易度:1

STEP.1

このコードを写経して、書いている内容が理解できる。 書き間違い、写し間違いでエラーが起こったときに、VSCodeのチカラを借りたり、お手本のコードと見比べて修正できる。

STEP.2

上記コードの処理の流れを理解した上で、その流れに沿って自分でコードが書ける。
エラーが起こったときに、ある程度はVSCodeのチカラを借りて修正できる。

列挙型とtoStringが理解できる

難易度:5

STEP.1

この時点でのコードを写経して、書いている内容が理解できる。
列挙型(enum)の特徴が言える。

STEP.2

特にMain.javaの13〜25行目とJankenHand.javaのコードについて、何をしているかを言える。 JankenHandのインスタンスは、3つの固定インスタンスしかなく、それぞれ「グーを表すJankenHand.Rock」「チョキを表すJankenHand.Scissors」「パーを表すJankenHand.Paper」であると理解できている。

STEP.3

JankenHandのコードを見て、toStringメソッドが、ObjectクラスのtoStringメソッドを「オーバーライド」していることが理解できる。

STEP.4

JankenHanddisplayHandメソッドとtoStringメソッドは、同じ処理をして同じものを返しているが、この2つの違いをmainメソッド内のSystem.out.printlnSystem.out.printで使うときの観点から説明できる。
toStringメソッドをオーバーライドするメリットが理解できている。

STEP.5

適切にObjectクラスのtoStringメソッドをオーバーライドするコードが自分で書ける。

staticメソッドとその利点が理解できる

難易度:6

STEP.1

この時点でのコードを写経して、書いている内容がある程度読める。
Mathクラスのstaticメソッドであるmaxを呼び出す(使う)方法がわかる。
JankenHandstaticメソッドであるfromIntを呼び出す(使う)方法がわかる。

STEP.2

JankenHandfromIntメソッドが引数の数字に応じて、「グー」か「チョキ」か「パー」のインスタンスを返すことが理解できる。

JankenHand player = JankenHand.fromInt(2);

というコードで、playerという変数に、「パー」を表すインスタンスである「JankenHand.Paper」が代入されていることがわかる。

STEP.3

写経で流れを理解した上で、Main.javaの11行目や18行目が自分で書ける。

STEP.4

JankenHandfromIntメソッドがstaticでなければならない理由が説明できる。
逆に、fromIntメソッドがstaticでないコード(fromIntstaticでない)を実際に書き、どの時点でどのような問題になるか確認できる。

booleanを返すメソッドの実装や使用ができる

難易度:3

STEP.1

この時点でのコードを写経して、書いている内容がある程度読める。

STEP.2

写経で流れを理解した上で、Main.javaの22〜28行目が自分で書ける。

STEP.3

写経で流れを理解した上で、自力でJankenHandwinToメソッドとloseToメソッドを実装できる。

繰り返し処理が書ける staticフィールドが定義/使用できる

STEP.1 → 難易度:2
STEP.2以降 → 難易度:4

STEP.1

この時点でのコードを写経して、書いている内容がある程度読める。 書き間違い、写し間違いでエラーが起こったときに、VSCodeのチカラを借りたり、お手本のコードと見比べて修正できる。

STEP.2

マジックナンバーとは何か、マジックナンバーを使ってはいけない理由を説明できる。
マジックナンバーを使わないために、finalをつけた定数(JANKEN_COUNT)を使うメリットを説明できる。

STEP.3

JANKEN_COUNTstaticになっている理由を、mainメソッドから使用することと関連付けて説明できる。

インターフェイスの定義/実装ができる

STEP.1、STEP.2 → 難易度:7
STEP.3 → 難易度:8

STEP.1

この時点でのコードを写経して、書いている内容がある程度読める。

nextHandメソッドを持つJankenStrategyインターフェイスを書きなさい。
nextHandメソッドは、パッケージの外部からアクセス可能で、引数は無し、返り値の型はJankenHand型である。

という指示を受けて、JankenStrategy.javaが書ける。

また、

JankenStrategyを実装するFixedHandStrategyを書きなさい。 nextHandメソッドは、固定値としてJankenHand.Rockを返すものとする。

という指示を受けて、FixedHandStrategy.javaが書ける。

STEP.2

Pc.javaの7行目、8行目が理解できる。
サンプルコードではPCが次の手を出す戦略として、RandomStrategyを使っているが、FixedHandStrategyを使うように書き換えることができる。

STEP.3

このサンプルコードの状態から、trackの5章終わりの状態まで、理解しながら書き換えることができる。

  • Pcクラスのフィールドとしてstrategyを定義し、そのsetterを書くことができる。
  • PcクラスのnextHandメソッドを、上記の変更に合わせて書き換えることができる。
  • FixedHandStrategyに「どの手で固定するか」を表すhandフィールドを定義し、その初期化を行うコンストラクタ(引数に「固定する手」をとる)が書ける。
  • FixedHandStrategyクラスのnextHandメソッドを、上記の変更に合わせて書き換えることができる。
  • mainメソッド内で、Pcクラスのインスタンスpcに対して、任意の戦略を設定するコードが書ける。

インターフェイス定義時にデフォルトの挙動を設定したメソッドを書ける

STEP.1 〜 STEP.3 → 難易度:9
STEP.4 → 難易度 10

STEP.1

この時点でのコードを写経して、書いている内容がある程度読める。

JankenStrategyインターフェイスにprevHandsメソッドを追加しなさい。
prevHandsメソッドは、パッケージの外部からアクセス可能で、返り値はなく、引数にJankenHand型のmyHandとenemyHandをとる。
prevHandsメソッドは、実装先で必ずしもオーバーライドしなくてもよく、オーバーライドされなかったときは、何もしないように定義しておく。

という指示を受けて、JankenStrategy.javaに正しいコードを追記できる。

RandomStrategyFixedHandStrategyprevHandsメソッドをオーバーライドしなくても良いことを理解し、その場合のprevHandsメソッドの挙動を説明できる。

STEP.2

ChottoKashikoiStrategy.javaに書いてあるコードを理解できる。

STEP.3

trackの6章終わりの状態(サンプルコードの状態)までを、ある程度理解しながら自力で完成させることができる。

STEP.4

prevHandsメソッドが実質ChottoKashikoiStrategyでしか実装されないにもかかわらず、独自のメソッドとしてではなく、JankenStrategyのメソッドとして定義しなければならない理由を、mainメソッドやPcクラスでどのように使用するかという観点から説明できる。

janken-sample's People

Contributors

hyperkinoko avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.