表記、先日こちらのブログでもお伝えした通り自分のJavaプログラミングスキル自体が足りず、結局意味が分からなくて終わりにしました。
そこからJava入門の本を買って読んだりして、少しずつJavaのことを理解しようとしています。
本はこちらを購入しました。めちゃくちゃ分厚くて、まだ半分もいけていません。
価格:2,860円 |
また、こちらのサイトを参考にしながら、ひたすら写経をしています。ほんとこちらの執筆をされた@tentomさんという方に足を向けて眠れないような感覚。
とはいえ、こちらのサイトで割愛されているところが私には到底難しくて分からず、けどなんとかしようということで、今頑張っているところです。
そのあたりを、こちらで書いていこうと思います。
前提
- Visual Studio をMacにインストールして、そこで書いています
- Extensionとして、Test Runner for Javaをインストールしています
とっかかり
まずは上記で書かれている、2の引数まで通るコードを書きました。
で、3は数字そのままではなく、Fizzを返す必要があるんですね。
3でFizzが返ってくるようにFizzbuzz.javaを修正する
ここで、私の少ない知識をフル稼働させ、修正を試みます。
3だけ条件式を作り、それ以外はそのまま、という流れ、ということなのかな、、半分くらい理解できていません。。
次は5
3に倣い、5でBuzzが返ってくるようなものを作ってみます。
ここで、普通に5を条件分岐で追加すれば良いのですが、
この辺で一度リファクタリングを
この辺りで、テストコードの方、毎回インスタンスを立ち上げる式を追加していて、これは冗長だなと思われます。
FizzBuzz fizzbuzz = new FizzBuzz();
このコードを毎回追加するのではなく、最初にまとめて書けたらいいなぁと思いながら見てると、はい、元のサイトで以下のように追加しているのに気づきました。こういうふうに、立ち上げ時にやるんすね。
何が悪いのか。おそらく、メソッドを先に追加しなかったからなのかな、と。
参照させてもらってるサイトを参考にし、メソッドを追加することにします。
早速テストを流してみます。
@Before
のところに赤いアンダーラインが引いてあるんですよね。
再度流しても失敗。
これはもう後で考えることにしよう。。コードを元に戻します。
気を取り直して15を
これはおかしい。3の倍数、5の倍数のところで先に処理しちゃってるから、ここに引っかかるものがなく通過してしまっているような気がします。
多分、3と5の倍数でもあるから、そのせいなのかなと思ったり、、
試しに、5の倍数でBuzzっていうのを削除して、トライしてみると、
うーん。3と5を通らずに、15だけできるものは、、
答えはelse if
ぱっと思いつきました。そうじゃん、ifを並列に書いてたからダメで、else if を使って分岐させればいいんじゃん、と思いつきました。
ここまできたら大きな山は超えたかな、という気分です。
0にトライ
あとは1未満と、101以上を超えたらダメですよ、を、元のサイトを参考にして追加してみます。
ちなみに0では、なぜFizzBuzzが返ってくるのか。
以下、条件分岐のところで、最初に15の倍数で当ててるから、そこに0を入れても0になっちゃう、ということでFizzBuzzが返ってくるのかな、と思います。
今イマの、FizzBuzzのコード。
本日のおさらい
- FizzBuzz問題という題材を使って、3の倍数、5の倍数、15の倍数でそれぞれ処理させ、テストして内容が正しいことを学びました。
- 1未満の時にエラー処理をさせたかったのですが、それがうまくコーディングできず、時間切れとなりました。
- 101以上についても時間が足りず、作成していません。
- 参照させてもらってるコードで、StringBuilderというパーツ?を使っていて、その内容をきちんと理解せずに使っています。多分、数字を入力する時に使うものなんだと思ってます。