前提・実現したいこと
Java初心者です。現在ブラックジャックの作成をしているのですが、open()メソッドで10以上のカードを10として扱い合計値を出す方法がわからず色々試してはみたのですが上手く行かず止まってしまっている状態です。エラーは起きていないのですが、アドバイスをしていただきたいです。宜しくお願い致します。
該当のソースコード
package blackjack; import java.util.ArrayList; import java.util.Collections; public class Dealer extends Human { protected ArrayList<Integer> cards = new ArrayList<Integer>(); //山札のデッキ //コンストラクタ //山札に全カードを追加 //最後に山札をシャッフル public Dealer() { for (int m = 1; m <= 4; m++) { for (int n = 1; n <= 13; n++) { cards.add(n); } } Collections.shuffle(cards); } //手札の合計値を計算 public int open() { int result = 0; for (int i = 0; i < myCards.size(); i++) { if (10 < myCards.get(i)) { myCards.set(i, 10); } result += myCards.get(i); } return result;//戻り値は手札の合計値 } //引いたカードを手札に追加するメソッド public void setCard(ArrayList<Integer> drawnCards) { myCards.addAll(drawnCards); } public boolean checkSum() { if (open() <= 21) { return true; }else { return false; } } //山札から2枚引き、引いたカードを戻り値にする //引いたカードを山札からremoveする public ArrayList<Integer> deal() { int a = 0; ArrayList<Integer> drawnCards = new ArrayList<Integer>();//両プレイヤーの引いたカード// for (int i = 0; i < 2; i++) { int card = cards.get(a); drawnCards.add(card); cards.remove(a); } return drawnCards; } //山札から1枚引き、ひいたカードを戻り値とする。 public ArrayList<Integer> hit() { ArrayList<Integer> hit= new ArrayList<>(); hit.add(cards.get(0)); cards.remove(0); return hit; } }
myCardsは、Humanに定義されているのでしょうか?
ご提示のコードだけでは、コンパイルエラーになってしまいます。
はい、「protected ArrayList<Integer> myCards = new ArrayList<Integer>();」と定義しています。
手札に11以上のカードがあった場合、10点として計算をするようにしたいのですが。。。
「うまくいかない」とは、どういうものなのか具体例をあげましょう。Aと言う値を入力したときにBという出力をしたいが、実際にはCと言う出力がされてしまう、とか。
ifとelseを使って、もしmyCards.get(i)をした結果が11以上ならば、10を合計値に加算し、そうでなければmyCards.get(i)をした結果を合計値に加算するとしたところ無事成功しました。ありがとうございます!