⑨まとめ
課題6 カードクラスを完成させる 解答
①Cardクラス修正
public class Card {
/* 属性 */
private SuitEnum suit; // スート
private int number; // 数値
/* コンストラクタ */
public Card(SuitEnum suit, int number) {
this.suit = suit;
this.number = number;
}
/* アクセサ */
public SuitEnum getSuit() {
return suit;
}
public int getNumber() {
return number;
}
// 自身の情報を表示するメソッド
public void openFace() {
System.out.println(this.suit.getName() + "の" + this.number);
}
}
②全52枚のカード作成
// カードリストを表示
List<Card> cards = new ArrayList<>();
// 2重ループで各スート1-13までを作成+格納
for (SuitEnum suit : SuitEnum.values()) {
for (int i = 1; i <= 13; i++) {
cards.add(new Card(suit, i));
}
}
スートのEnumのリストを使って二重ループを行うことで
先に問題になっていたスートの曖昧さ、順番の問題が
解消していることがわかると思います
③全カードの和名表示
// // 全カード表示
for (Card card : cards) {
card.openFace();
}
実行画面は省略しますが
クラス内部に表示メソッドが存在することで、mainメソッド側の修正は不要でした
これが単一責任の法則に基づいて設計した場合の利点ですね
まとめ
この章でやったこと
カードクラスを作成した
for文を使った
単純なfor文
拡張for文
二重ループなどの応用
Listを使った
リストの宣言や、基本的な操作方法
公式リファレンス紹介
Enumを使った
単純なEnumの定義
属性の追加方法
リストの取得などの応用
これからやりたいこと
この章では、上記の様々な機能を使用して
トランプの一枚一枚のカードをクラスとして表現しました
また、全種類のカードを作ることができたので
トランプの山札を作ることができたと考えてもいいかもしれません
しかしここはオブジェクト指向の世界
もう一個踏み込んで「山札」もオブジェクトとして考えてみましょう
思えば、山札にだってドローをしたりシャッフルしたり…
固有の振る舞いを持ちそうですよね(=クラスにしたくなる)
でも山札ってどのような属性を持てばいいんでしょう
そして、今回作ったカードクラスとのつながりは?
こんな疑問を抱えつつ、次の章では「山札」のクラスを作っていきます