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

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

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

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

Q&A

3回答

7730閲覧

簡易版ポーカー役判定

w30P9ZaR25lAQGo

総合スコア1

Java

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

0グッド

0クリップ

投稿2020/08/02 06:45

編集2020/08/02 10:47

前提・実現したいこと

初心者です。
javaで簡易版のポーカー役判定をどうやれば実現できるかわかりません。

前提条件
手札は4枚(標準入力で打ち込むだけ、空白なし)。数字は1~9。絵柄はなし。

標準入力で「7777」と入力したら「Four Card」、「1113」と入力したら「Three Card」、「1199」と入力したら「Tow Pair」と表示するプログラムにしたいです。

特に[1199]や「1991」などの「Tow Pair」判定、そして「Tow Pair」でないと判定された後、どうやって「One Pair」の判定を行えばいいかよくわかりません。

発生している問題・エラーメッセージ

該当のソースコード

試したこと

java

1public class Main { 2 public static void main(String[] args) { 3 Scanner sc = new Scanner(System.in); 4 int line = sc.nextInt(); 5 sc.nextLine(); 6 LinkedList<Character> site = new LinkedList<Character>(); 7 char first; 8 char second; 9 int count=0; 10 11 while(sc.hasNextLine()){ 12 String card = sc.nextLine(); 13 for(int i=0; i<card.length(); i++){ 14 site.add(card.charAt(i)); 15 } 16 first=site.get(0);//一番目のカード番号 17       //一番目のカードと一致する回数を調べる 18 for(char number: site){ 19 if(first==number){ 20 count+=1; 21 } 22 } 23       //役判定 24 if(count==4){ 25 System.out.println("Four Cord"); 26 }else if(count==3){ 27 System.out.println("Three Card"); 28 }else if (count==2){ 29 second=site.get(1);//二番目のカード番号 30 for(int i=2; i<4;i++){ 31 if(second==site.get(i)){ 32 System.out.println("Two Pair"); 33 }else if(i==3){ 34 System.out.println("One Pair"); 35 } 36 } 37 }else{ 38 System.out.println("No Pair"); 39 } 40 count=0; 41 site.clear(); 42 } 43 44 //System.out.println("test"); 45 } 46} 47

補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

guest

回答3

0

カードの数値毎に枚数を格納する配列 cards(int[]) を用意して、

  1. 入力された4文字を1文字ずつに分解して、cards[分解した文字]++ としてカウントを行う
  2. int pairs = 0;
  3. i を 1~9 までループして、

  cards[i] = 4 なら pairs = 4 としてループを打ち切る
cards[i] = 3 なら pairs = 3 としてループを打ち切る
cards[i] = 2 なら、pairs++;

  1. switch(pairs) として、

  4: "Four Card" を出力
3: "Three Card" を出力
2: "Two Pair" を出力
1: "One Pair" を出力
0: "None" を出力

がすっきりしますかね。

※通常のポーカーに拡張したときも、まず手札を数値毎、記号毎にカウントするのは応用できます

投稿2020/08/03 00:50

tacsheaven

総合スコア13703

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

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

0

4文字を1文字ずつ切り分けてIntegerのリストにしてソートして
リスト要素の0番目と1番目、1番目と2番目、2番目と3番目の差をそれぞれ計算して
全部0だったら「Four Card」
隣り合う2つ(パターン2つあり)が0だったら「Three Card」
隣り合わない2つが0だったら「Tow Pair」
どれかが0だったら「One Pair」
上記どれにも引っかからなかったら「None」
というのはどうでしょうか?

投稿2020/08/03 00:29

q_sane_q

総合スコア610

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

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

0

手札の1枚目のカードを見て、同じ数字のカードが何枚あるか数えます。
4枚なら「Four Card」を出力して終了。
3枚なら「Three Card」を出力して終了。
2枚ならもう一枚のカードを手札から除き、残りのニ枚を確認します。
残りの2枚が同じなら「Two Pair」を出力して終了。
同じ数字のカードが1枚もなければ、そのカードを手札から覗いて最初からチェック。

投稿2020/08/02 07:23

Kaleidoscope

総合スコア257

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問