🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

1回答

1439閲覧

open()メソッドにて10以上のカードを10として扱う方法

bi_ki

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2020/12/09 00:51

前提・実現したいこと

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; } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

momon-ga

2020/12/09 01:44

myCardsは、Humanに定義されているのでしょうか? ご提示のコードだけでは、コンパイルエラーになってしまいます。
bi_ki

2020/12/09 01:52

はい、「protected ArrayList<Integer> myCards = new ArrayList<Integer>();」と定義しています。 手札に11以上のカードがあった場合、10点として計算をするようにしたいのですが。。。
dodox86

2020/12/09 01:53

「うまくいかない」とは、どういうものなのか具体例をあげましょう。Aと言う値を入力したときにBという出力をしたいが、実際にはCと言う出力がされてしまう、とか。
bi_ki

2020/12/09 02:06

ifとelseを使って、もしmyCards.get(i)をした結果が11以上ならば、10を合計値に加算し、そうでなければmyCards.get(i)をした結果を合計値に加算するとしたところ無事成功しました。ありがとうございます!
guest

回答1

0

提示されているコードで最低限の動作確認すると、期待通りになっていると思いますが。

「うまくいかない」とは?

java

1class Human { 2 protected ArrayList<Integer> myCards = new ArrayList<Integer>(); 3} 4public class Dealer extends Human { 5 //手札の合計値を計算 6 public int open() { 7 int result = 0; 8 for (int i = 0; i < myCards.size(); i++) { 9 if (10 < myCards.get(i)) { 10 myCards.set(i, 10); 11 } 12 result += myCards.get(i); 13 } 14 return result;//戻り値は手札の合計値 15 } 16 17 18 public static void main(String[] args) { 19 Dealer test = new Dealer(); 20 21 test.myCards.add(1); 22 test.myCards.add(2); 23 System.out.println(3 == test.open()); 24 25 test.myCards.add(13); 26 System.out.println(13 == test.open()); 27 28 test.myCards.add(11); 29 System.out.println(23 == test.open()); 30 31 test.myCards.add(10); 32 System.out.println(33 == test.open()); 33 34 } 35}

投稿2020/12/09 02:15

編集2020/12/09 02:16
momon-ga

総合スコア4826

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bi_ki

2020/12/09 02:24

ご回答ありがとうございます! open()メソッドのif文の処理を「result += 10」として、elseを追加しそちらの処理を「result += myCards.get(i)」としたら無事実行出来ました。
momon-ga

2020/12/09 02:42

もとのコードのままでも、うまくいくと思うのですが・・・<実行結果はすべてtrueが表示されます なにを「うまくいかない」と考えていたのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問