学習雑記JAVA20

複数の言語を交互に学習しているとビルトインメソッドが「あれっ何故動かない??」ということがおき、しかも気づけないことがある。

名前も似ていて、エラー表示には、「メソッドが無い」と出るよりは「型が違う」かまたは「型に互換性が無い」と表示されることもドツボにハマる原因だ。

 

今日は、ポーカーゲームのペアの判定部分を作成しようとして、pythonに出てくるarray.count(特定要素)をJavaで使用を試みて、無限ループに陥った。

 

仮説=>実行=>不具合からの検証がまだまだ視点の切り替えが遅いんだな、、と感じた。

 

振り返り:

pokerゲームはルールを一つ一つメソッド化する上で非常に勉強になる。コードを書いていく上で非常に挑戦的だった。(まだ出来上がっていない)

現状、下記の3種のクラスとタイプに分けて構築中。Handクラスのロジックが多いので、判定する部位などを切り分けるか検討。ストレートの判定は簡単に思えたが1:10:J:Q:Kのように一見連なっていない部分のループをどう考えるかが問題かなと思っている。

 

カードの種類と強さをランク付けるCardクラス

1ゲームごとのカードのパターンを決めるDeckクラス

プレイヤーに渡すカードや手札の判定を行うHandクラス

class Card{
short rank;
short mark;
String[] marks = {"Spade", "Heart", "Club", "Diamond"};
static String[] ranks = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};

public static String getRank(int r) {
return ranks[r];
}
Card(short mark, short rank) {
this.rank = rank;
this.mark = mark;
}
@Override
public String toString() {
return ranks[rank] + " の " + marks[mark];
}
public short getRank() {
return rank;
}
public short getMark() {
return mark;
}
}
class Deck{
// デッキは4種*13の52枚のカード
ArrayList<Card> cards;
Deck() {
cards = new ArrayList<>();
for(short a =0; a<= 3; a++) {
for(short b=0; b<= 12; b++){
cards.add(new Card(a, b));
}
}
}
// 配列の順序はビルトインでシャッフル
public void shuffle() {
Collections.shuffle(cards);
}
// 配ったカードは重複しないようにデッキのサイズを調整
public Card drawCard() {
return cards.remove(cards.size()-1);
}
}