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

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

詳細はこちら
Java

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

Q&A

解決済

2回答

2130閲覧

ブラックジャックのプログラムを作ったのですがAの判定を1と11でも判定するにはどうすれば良いでしょうか?

ta.tatu

総合スコア12

Java

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

0グッド

0クリップ

投稿2019/11/05 11:16

編集2019/11/05 21:29
コードpackage BJ; import java.util.ArrayList; import java.util.Random; import java.util.Scanner; public class BJ01 { static Scanner scan; public static void main(String[] args) { boolean flg = true; int playersum = 0; int cumsum = 0; scan = new Scanner(System.in); ArrayList<String> playercard = new ArrayList<String>(); ArrayList<String> comcard = new ArrayList<String>(); for (int i = 0; i < 2; i++) { playercard.add(getcard("あなた")); comcard.add(getcard("ディーラー")); } System.out.println(""); System.out.println("あなたの合計は" + cardsum(playercard) + "です。"); System.out.println("ディーラーの合計は" + cardsum(comcard) + "です。"); System.out.println(""); while (true) { playersum = cardsum(playercard); System.out.println("現在の合計は" + playersum + "です。"); System.out.println(); if (playersum > 21) { break; } if(flg == false) { break; } flg = Key(); if (flg == true) { playercard.add(getcard("あなた")); } } while(true) { if (cumsum <= 17 && playersum <= 21) { comcard.add(getcard("ディーラー")); cumsum = cardsum(comcard); }else { break; } } System.out.println("あなた「" + playersum + "」 ディーラー「" + cumsum +"」で"); if (playersum > 21) { System.out.println("バースト!あなたの負けです。"); }else if (cumsum > 21) { System.out.println("バースト!あなたの勝ちです。"); }else if (playersum < cumsum) { System.out.println("あなたの負けです。"); }else if (playersum > cumsum) { System.out.println("あなたの勝ちです。"); }else { System.out.println("ドローです。"); } } private static boolean Key() { while (true) { System.out.println("もう1枚カードを引きますか?(y/n) :"); String yn = scan.next(); if (yn.equals("y")) { return true; }else if (yn.equals("n")) { return false; }else { System.out.println("error: YまたはNを入力してください。"); } } } private static String getcard(String turnplayer) { String[] cardlist = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"}; Random random = new Random(); String card = cardlist[random.nextInt(13)]; System.out.println(turnplayer + "に「" + card + "」が配られました。"); return card; } private static int cardsum(ArrayList<String> cardlist) { int sum = 0; for(int i = 0; i < cardlist.size(); i++) { try { sum += Integer.parseInt(cardlist.get(i)); }catch (NumberFormatException e) { if (cardlist.get(i).equals("J") || cardlist.get(i).equals("Q") || cardlist.get(i).equals("K")); sum += 10; } } for (int i = 0; i < cardlist.size(); i++) { if (cardlist.get(i).equals("A") && sum <= 10) { sum += 11; }else if (cardlist.get(i).equals("A")){ sum ++; } } return sum; } }

エースのカードの処理の仕方が分からず困ってます!
エースのカードを1の場合と11の場合に処理したいのですが誰か教えて頂けたら助かります!
宜しく御願いします。
このコードの場合エースのカードは11で判定されてしまいます。
エースのカードを1と11でも判定処理できるようにしたいです。

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

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

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

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

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

y_waiwai

2019/11/05 11:17

現行のコードではどういう動作になるんでしょうか。 質問を編集して追記しましょう
ta.tatu

2019/11/05 11:41

追記しました。
m.ts10806

2019/11/05 20:45

タイトルには要件を記載してください。 同じようにブラックジャックを作っていて何か別の問題が起きた時に同じタイトルで要件が伝わりますか? なるべく同一人物による同一タイトルは避けるべきと思います。時間が経つと本人ですらタイトルから内容を思い出すことは出来ないでしょうし、同じ問題を抱えた誰かの参考になりません。
ta.tatu

2019/11/05 21:12

分かりました! これから気をつけます!
m.ts10806

2019/11/05 21:25

今からでも変更されたほうが。
ta.tatu

2019/11/05 21:30

変更しました。 指摘ありがとうございます。
guest

回答2

0

ベストアンサー

try { sum += Integer.parseInt(cardlist.get(i)); }catch (NumberFormatException e) { if (cardlist.get(i).equals("J") || cardlist.get(i).equals("Q") || cardlist.get(i).equals("K")); sum += 10; }

catch の中の if 文が ";" で終わっているので, "A" の場合でも 10 足されてしまっています.

投稿2019/11/05 18:31

jimbe

総合スコア13201

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

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

ta.tatu

2019/11/05 21:07

ありがとうございます。 if文の”;”を無くせばいいのでしょうか?
jimbe

2019/11/06 01:28

この if 文の目的は「 J,Q,K の時に sum に 10 を足す」ことでしょうから, ";" を消すか, sum += 10; を {} で囲む形にするかだと思います.
ta.tatu

2019/11/06 03:40

有り難うございます!
guest

0

Aを1とするか11とするかは、合計が決まったあとに決定するべきです。
一旦Aを1として計算し、合計が11以下でかつAがある場合に10を加算すればいいです。

投稿2019/11/05 13:06

swordone

総合スコア20669

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

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

ta.tatu

2019/11/05 13:15

解答ありがとうございます! 参考にしてかんがえてみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問