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

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

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

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

Q&A

解決済

3回答

2095閲覧

String型の大小を定める方法

ant3ng

総合スコア14

Java

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

0グッド

0クリップ

投稿2018/03/31 05:59

前提・実現したいこと


Java
Suit(カードのマーク)の大小を決める方法(Stringの配列における大小設定)
下記のソースコードでは、 スペード>ハート>ダイヤ>クラブ の順に大小の設定をしたいです。


該当のソースコード

Java

1class Deck{ 2 private ArrayList<Card> deck; 3 private static final int cardNumber = 13; 4 String[] suits = {"スペード", "ハート", "ダイヤ", "クラブ"}; 5//以下略 6

試したこと

一度、52枚を作ってからSuitに分別(011がクラブ、1223がダイヤ、、、)しようと試みましたが、途中で挫折したため、suitとnumberの2つに分けてやっています。
compareToなどでString型の大小を比較できるものの、大小自体を定めることはできないと知ったため、質問致しました。
回答お願いいたします。

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

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

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

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

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

guest

回答3

0

ベストアンサー

Cardクラスに自前のcompareToメソッドを実装しましょう。

java

1public class Card implements Comparable<Card> { 2 // 省略 3 4 @Override 5 public int compareTo(Card o) { 6 // ここに比較処理を実装する。 7 } 8}

投稿2018/03/31 06:06

編集2018/03/31 06:23
hichon

総合スコア5737

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

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

ant3ng

2018/03/31 07:54

public int compareTo(Card otherCard){ if(this.rank < otherCard.rank){ return -1; } else if(this.rank > otherCard.rank){ return 1; } else if(this.rank == otherCard.rank){ if(this.suit < otherCard.suit){ return -1; } else if(this.suit > otherCard.suit){ return 1; } else {return 0;} } } rankもsuitもint型にした場合、このようになるのでしょうか...?
hichon

2018/03/31 14:42

rank→suitの順に比較しているので、ソートもその順番になります。
ant3ng

2018/03/31 15:49

安心しました。 ありがとうございます。
guest

0

スートは4種しかないので、enumで宣言するというのもよく使われます。
enumはComparableを実装しており、列挙した順に小さいと判定しますので便利です。

java

1public class Card implements Comparable<Card> { 2 enum Suit { 3 CLUB, DIAMOND, HEART, SPADE; 4 } 5 6 Suit suit; 7 int number; 8 9 @Override 10 public int compareTo(Card o) { 11 int c = this.suit.compareTo(o.suit); 12 return c == 0 ? Integer.compare(this.number, o.number) : c; 13 } 14}

投稿2018/03/31 23:41

swordone

総合スコア20649

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

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

ant3ng

2018/04/08 07:30

enum自体は見たことがあったものの、???な状態だったので助かります。 ありがとうございます。
guest

0

独自の大小定義を実装するのは、別回答にあるとおりです。

カードの内部表現をすこし工夫する案を述べます。
spades スペード
hearts ハート
diams ダイヤ
clubs クラブ
であり、スーツの強さの順番は C < D < H < S のアルファベット順です。
つまり、スーツを C, D, H, S で持つことにすれば、文字列の大小比較がそのまま使えます。
(内供表記と、画面での表示を一致させるさせる必要はないです。)

トランプの場合、 A, J, Q, K や joker の上記のこともあるので、数字部分も内部表記と画面表示を一致させるのは却って面倒になります。

追記:
"java card class playing joker"
などで goolge 検索すれば、クラス定義例をいろいろ見つけることができます。
いろいろな実装方法をしらべてみるとおもしろいと思います。

投稿2018/03/31 06:46

編集2018/04/08 09:34
katoy

総合スコア22324

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

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

ant3ng

2018/03/31 15:49

アルファベット順になっているとは思ってもいませんでした。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問