質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
Java

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

Q&A

解決済

2回答

4294閲覧

メソッドを呼び出して数をカウントしたいです

sayachan

総合スコア12

Java

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

1グッド

2クリップ

投稿2020/03/15 04:07

#コンソールに出力したい結果は以下です
ブラックジャックへようこそ!
貴方の1枚目のカードはハートのQ
ディーラーの1枚目のカードはダイヤのA
貴方の2枚目のカードはハートのA
ディーラーの2枚めのカードは秘密だよ
あなたの現在のポイントは11です
カードを引きますか? Yes:y or No:n

ーーーーーーーーーーーーーーーーーーーーーーーー
プレイヤーの何枚目、という部分をメソッドを使い1、2、3・・・としたいです。

##現状は以下です
ブラックジャックへようこそ!
貴方の0枚目のカードはハートのQ
ディーラーの1枚目のカードはダイヤのA
貴方の0枚目のカードはハートのA
ディーラーの2枚めのカードは秘密だよ
あなたの現在のポイントは11です
カードを引きますか? Yes:y or No:n
##ソースコードを載せます

package blackjack; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class MainGame { public static void main(String[] args) { System.out.println("ブラックジャックへようこそ!"); List<Integer> deck = new ArrayList<Integer>(52); Deck.shuffleDeck(deck); // メソッドを呼び出す // シャッフルしたカードを表示。デバック用 // for(Integer i : deck) { // System.out.println(i); // } List<Integer> player = new ArrayList<>(); //プレイヤーの手札リストを作成 List<Integer> dealer = new ArrayList<>(); //ディーラーの手札リストを作成 //プレイヤー・ディーラーがカードを2枚引く player.add(deck.get(0)); dealer.add(deck.get(1)); player.add(deck.get(2)); dealer.add(deck.get(3)); //プレイヤー・ディーラーの手札のポイントを表示 System.out.println("貴方の" + Player.getPlayerHands() + "枚目のカードは" + Deck.toDescription(player.get(0))); System.out.println("ディーラーの1枚目のカードは" + Deck.toDescription(dealer.get(0))); System.out.println("貴方の" + Player.getPlayerHands() + "枚目のカードは" + Deck.toDescription(player.get(1))); System.out.println("ディーラーの2枚めのカードは秘密だよ"); //プレイヤー、ディーラーのポイントを集計 int playerPoint = Deck.sumPoint(player); int dealerPoint = Deck.sumPoint(dealer); System.out.println("あなたの現在のポイントは" + playerPoint + "です"); //プレイヤーがカードを引くフェーズ while (true) { System.out.println("カードを引きますか? Yes:y or No:n"); //キーボードの入力を受け付けて、変数strに代入する Scanner scan = new Scanner(System.in); String str = scan.next(); if ("n".equals(str)) { break; } else if ("y".equals(str)) { //手札に山札から1枚加える player.add(deck.get(Deck.deckCount)); //山札と手札を一枚進める Deck.deckCount++; Player.setPlayerHands(Player.getPlayerHands() + 1); System.out.println("あなたの" + Player.getPlayerHands() + "枚目のカードは" + Deck.toDescription(player.get(Player.getPlayerHands() - 1))); playerPoint = Deck.sumPoint(player); System.out.println("現在の合計は" + playerPoint); //プレイヤーのバーストチェック if (Deck.isBusted(playerPoint)) { System.out.println("残念、バーストしてしまいました。ディーラーの勝ちです。"); return; } } else { System.out.println("あなたの入力は" + str + "です。y か n を入力してください。"); } } //ディーラーが手札を17以上にするまでカードを引くフェーズ while (true) { //手札が17以上の場合ブレーク if (dealerPoint >= 17) { break; } else { //手札に山札から1枚加える dealer.add(deck.get(Deck.deckCount)); //山札を1枚進める Deck.deckCount++; //ディーラーの合計ポイントを計算 dealerPoint = Deck.sumPoint(dealer); //ディーラーのバーストチェック if (Deck.isBusted(dealerPoint)) { System.out.println("ディーラーがバーストしました。あなたの勝ちです!"); return; } } } //ポイントを比較する System.out.println("あなたのポイントは" + playerPoint); System.out.println("ディーラーのポイントは" + dealerPoint); if (playerPoint == dealerPoint) { System.out.println("引き分けです。"); } else if (playerPoint > dealerPoint) { System.out.println("勝ちました!"); } else { System.out.println("負けました・・・"); } } }
package blackjack; import java.util.Collections; import java.util.List; public class Deck { static int deckCount; //山札の進行状況を記録する変数deckCountを定義 // 山札(deck)に値を入れ、シャッフルするメソッド public static void shuffleDeck(List<Integer> deck) { // リストに1-52の連番を代入 for (int i = 1; i <= 52; i++) { deck.add(i); } // 山札をシャッフル Collections.shuffle(deck); } //現在の合計ポイントを計算するメソッド public static int sumPoint(List<Integer> list) { int sum = 0; for (int i = 0; i < list.size(); i++) { sum = sum + toPoint(toNumber(list.get(i))); } return sum; } //山札の数をカードの数に置き換えるメソッド private static int toNumber(int cardNumber) { int number = cardNumber % 13; if (number == 0) { number = 13; } return number; } //山札の通し番号を得点計算用のポイントに変換するメソッド J/Q/Kは10とする public static int toPoint(int num) { if (num == 11 || num == 12 || num == 13) { num = 10; } return num; } //山札の数を(スート)の(ランク)の文字列に置き換えるメソッド public static String toDescription(int cardNumber) { String rank = toRank(toNumber(cardNumber)); String suit = toSuit(cardNumber); return suit + "の" + rank; } //カード番号をランクに変換するメソッド(A,J,Q,Kなど) private static String toRank(int number) { switch (number) { case 1: return "A"; case 11: return "J"; case 12: return "Q"; case 13: return "K"; default: String str = String.valueOf(number); return str; } } //山札の数をスートに置き換えるメソッド private static String toSuit(int cardNumber) { switch ((cardNumber - 1) / 13) { case 0: return "クラブ"; case 1: return "ダイヤ"; case 2: return "ハート"; case 3: return "スペード"; default: return "例外です"; } } //手札がバーストしているか判定するメソッド public static boolean isBusted(int point) { if (point <= 21) { return false; } else { return true; } } }
package blackjack; public class Player { private static int playerHands; //プレイヤーの手札枚数を記録する変数playerHandsを定義 public static int getPlayerHands() { return playerHands; } public static void setPlayerHands(int playerHands) { Player.playerHands = playerHands; } }

ネットなどでも調べてみたのですが、限界を感じ。。。
よろしければご教授願います。

s.k👍を押しています

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

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

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

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

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

guest

回答2

0

Playerのクラス変数の初期値は0。
whileループに入る前は、一度もsetPlayerHands()を読んでいないので値は0のまま。

投稿2020/03/15 04:36

javahack

総合スコア1088

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

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

0

ベストアンサー

ディーラーのほうは

java

1System.out.println("ディーラーの1枚目のカードは" 2 + Deck.toDescription(dealer.get(0)));

と get(0) 指定しているのですから, プレイヤーのほうも

java

1System.out.println("貴方の1枚目のカードは" 2 + Deck.toDescription(player.get(0)));

で良いのではないでしょうか.

#追加
クラスがクラスとして使われていませんので, Card クラスを追加し Deck に有ったカード関係メソッドを移動 / Player,Deck 両クラスに手札の ArrayList を移動, Deck に有ったポイント計算等のメソッドを移動する等再編してみました.

手札の番号表示に関しましては, Player.add メソッドがカードを追加した際にその追加位置を index として返すようにし, それを利用しています.

java

1import java.util.*; 2 3class Card { 4 private static final String[] RANKS = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"}; 5 private static final String[] SUITS = {"クラブ","ダイヤ","ハート","スペード"}; 6 7 private int cardNumber; //1-52 8 /** 9 * @param cardNumber 1-52 10 */ 11 Card(int cardNumber) { 12 this.cardNumber = cardNumber; 13 } 14 /** 15 * 得点計算用 16 * @return 1-10 17 */ 18 int getPoint() { 19 return Math.min(getRankIndex() + 1, 10); 20 } 21 /** 22 * @return 0-12 23 */ 24 private int getRankIndex() { 25 return (cardNumber - 1) % 13; 26 } 27 /** 28 * @return 0-3 29 */ 30 private int getSuitIndex() { 31 return (cardNumber - 1) / 13; 32 } 33 34 public String toString() { 35 return SUITS[getSuitIndex()] + "の" + RANKS[getRankIndex()]; 36 } 37} 38class Deck { 39 private List<Card> cardList = new ArrayList<>(52); //山札 40 41 Deck() { 42 for(int i=1; i<=52; i++) cardList.add(new Card(i)); 43 Collections.shuffle(cardList); 44 } 45 /** 46 * 最初の一枚を取り出し, リストから削除 47 * @return カード 48 */ 49 Card pop() { 50 return cardList.remove(0); 51 } 52 53 // シャッフルしたカードを表示 54 void printAll() { 55 for(Card i : cardList) { 56 System.out.println(i); 57 } 58 } 59} 60class Player { 61 private List<Card> cardList = new ArrayList<>(); //手札 62 /** 63 * カード追加 64 * @param card 65 * @return 最後に追加したindex (0-) 66 */ 67 int add(Card card) { 68 cardList.add(card); 69 return cardList.size() - 1; 70 } 71 /** 72 * カード読出 73 * @param index (0-) 74 * @return 75 */ 76 Card get(int index) { 77 return cardList.get(index); 78 } 79 /** 80 * 現在の合計ポイント 81 */ 82 int sumPoint() { 83 int sum = 0; 84 for(Card card : cardList) sum += card.getPoint(); 85 if(hasAce() && sum+10 <= 21) sum += 10; 86 return sum; 87 } 88 /** A を持っているか */ 89 private boolean hasAce() { 90 for(Card card : cardList) { 91 if(card.getPoint() == 1) return true; 92 } 93 return false; 94 } 95 /** 96 * 手札がバーストしているか 97 */ 98 boolean isBusted() { 99 return sumPoint() > 21; 100 } 101} 102public class MainGame { 103 public static void main(String[] args) { 104 System.out.println("ブラックジャックへようこそ!"); 105 106 Deck deck = new Deck(); 107 //deck.printAll(); //デバック用 108 109 Player player = new Player(); //プレイヤーを作成 110 Player dealer = new Player(); //ディーラーを作成 111 112 //プレイヤー・ディーラーがカードを2枚引く 113 player.add(deck.pop()); 114 dealer.add(deck.pop()); 115 player.add(deck.pop()); 116 dealer.add(deck.pop()); 117 118 //プレイヤー・ディーラーの手札を表示 119 System.out.println("貴方の1枚目のカードは" + player.get(0)); 120 System.out.println("ディーラーの1枚目のカードは" + dealer.get(0)); 121 System.out.println("貴方の2枚目のカードは" + player.get(1)); 122 System.out.println("ディーラーの2枚めのカードは秘密だよ"); 123 124 System.out.println("あなたの現在のポイントは" + player.sumPoint() + "です"); 125 126 //プレイヤーがカードを引くフェーズ 127 try (Scanner scan = new Scanner(System.in);) { 128 while (true) { 129 System.out.println("カードを引きますか? Yes:y or No:n"); 130 //キーボードの入力を受け付けて、変数strに代入する 131 String str = scan.next(); 132 133 if ("n".equals(str)) { 134 break; 135 } else if ("y".equals(str)) { 136 //手札に山札から1枚加える 137 int index = player.add(deck.pop()); 138 System.out.println("あなたの" + (index+1) + "枚目のカードは" + player.get(index)); 139 System.out.println("現在の合計は" + player.sumPoint()); 140 //プレイヤーのバーストチェック 141 if (player.isBusted()) { 142 System.out.println("残念、バーストしてしまいました。ディーラーの勝ちです。"); 143 return; 144 } 145 } else { 146 System.out.println("あなたの入力は" 147 + str + "です。y か n を入力してください。"); 148 } 149 } 150 } 151 152 System.out.println("ディーラーの2枚目のカードは" + dealer.get(1)); 153 //ディーラーが手札を17以上にするまでカードを引くフェーズ 154 while (dealer.sumPoint() < 17) { 155 //手札に山札から1枚加える 156 int index = dealer.add(deck.pop()); 157 System.out.println("ディーラーの" + (index+1) + "枚目のカードは" + dealer.get(index)); 158 //ディーラーのバーストチェック 159 if (dealer.isBusted()) { 160 System.out.println("ディーラーがバーストしました。あなたの勝ちです!"); 161 return; 162 } 163 } 164 165 //ポイントを比較する 166 System.out.println("あなたのポイントは" + player.sumPoint()); 167 System.out.println("ディーラーのポイントは" + dealer.sumPoint()); 168 169 if ( player.sumPoint() == dealer.sumPoint()) { 170 System.out.println("引き分けです。"); 171 } else if ( player.sumPoint() > dealer.sumPoint()) { 172 System.out.println("勝ちました!"); 173 } else { 174 System.out.println("負けました・・・"); 175 } 176 } 177}

plain

1ブラックジャックへようこそ! 2貴方の1枚目のカードはスペードのJ 3ディーラーの1枚目のカードはハートのA 4貴方の2枚目のカードはハートのK 5ディーラーの2枚めのカードは秘密だよ 6あなたの現在のポイントは20です 7カードを引きますか? Yes:y or No:n 8n 9ディーラーの2枚目のカードはクラブのJ 10あなたのポイントは20 11ディーラーのポイントは21 12負けました・・・

投稿2020/03/15 07:27

編集2020/03/20 16:12
jimbe

総合スコア13209

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問