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

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

詳細はこちら
Java

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

解決済

2回答

3796閲覧

トランプを取り出すプログラムについて

nekoyuya

総合スコア2

Java

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2021/02/14 03:12

前提・実現したいこと

javaのプログラムにてトランプをランダムに取り出し、
1枚目のカードはハート3
1枚目のカードの数字は3
2枚目のカードは・・・
2枚目のカードの数字は・・・
のように記号、及び数字を取りだすプログラムを作りたいと思っています。

そのため、下記haihuメソッドの部分を
System.out.println("this.Deck.get(1)の記号部分"+this.Deck.get(1)の数字部分)のような感じで取り出したいと思っています。

どのようにプログラムを変更すればいいのかを教えていただけると幸いです。

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

現在メインを実行するとCard@5c647e05のように表示されます。

該当のソースコード

Java

1ソースコード 2public class Main { 3 4 public static void main(String[] args) { 5 // TODO 自動生成されたメソッド・スタブ 6 7 Tranp a = new Tranp(); 8 a.Start(); 9 a.shuffle(); 10 a.haihu(); 11 } 12 13} 14//ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 15import java.util.ArrayList; 16import java.util.Collections; 17 18public class Tranp { 19 20 ArrayList<Card> Deck; 21 22 23 public void Start(){ 24 25 this.Deck = new ArrayList<Card>(); 26 27 String[] mark = {"ハート","クラブ","ダイヤ","スペード"}; 28 29 this.Deck.add(new Card(mark[0], 0)); 30 for (int i = 1; i < mark.length; i++) { 31 for (int j = 1; j <= 13; j++) { 32 this.Deck.add(new Card(mark[i], j)); 33 } 34 } 35 } 36 37 // カードシャッフル 38 void shuffle() { 39 Collections.shuffle(this.Deck); 40 } 41 42 void **haihu**() { 43 System.out.println(this.Deck.get(1)); 44 System.out.println(this.Deck.get(2)); 45 46 } 47 48} 49 50//ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 51 52public class Card { 53 54 55 static String Mark; 56 static int num; 57 58 public Card(String mark , int num){ 59 60 this.Mark = mark; 61 this.num = num; 62 63 } 64 65}

試したこと

ここに問題に対して試したことを記載してください。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

nekoyuya

2021/02/14 23:36

すいません、初めて利用したので以後気をつけます。 おふた方の回答どちらも役に立ったので今回は回答が早かった方をベストアンサーにさせてもらいました。
guest

回答2

0

Cardクラスの記号部分へのアクセス方法はすでに回答ついてますので、その他の気になった部分

1.記号と数字がすべて同じになる。
CardクラスのMark、numともstaticになっていますので、すべてのインスタンスが共通の値を持ちます。
最後に設定された、スペードの13が表示されるはずです。

2.カードの初期化
わざとかもしれませんが、
ハートの0、クラブの1~13、ダイヤの1~13、スペードの1~13で初期化するのは珍しいと思いました。

java

1 String[] mark = {"ハート","クラブ","ダイヤ","スペード"}; 2 3 this.Deck.add(new Card(mark[0], 0)); 4 for (int i = 1; i < mark.length; i++) { 5 for (int j = 1; j <= 13; j++) { 6 this.Deck.add(new Card(mark[i], j)); 7 } 8 }

3.カードの表示

java

1void **haihu**() { 2 System.out.println(this.Deck.get(1)); 3 System.out.println(this.Deck.get(2)); 4} 5

Deckの最初のデータは、get(1)でなく、get(0)でアクセスします。
※シャッフルしなければ、get(0)は、ハートの0です。

カードが、40枚ありますけど、40行(39行?)書くのはシンドイですね。

投稿2021/02/14 12:05

momon-ga

総合スコア4826

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

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

nekoyuya

2021/02/14 12:31

ご指摘いただいたようにすることでかなりイメージに近いようにできました! ありがとございます!
guest

0

ベストアンサー

間違ってませんね。
Deckという名の配列が保持されているのはCardオブジェクトのList。
オブジェクトをprintしようとすると提示のような表示になります。

何を参照したいか次第ですが、Cardオブジェクトのフィールドを

java

1this.Deck.get(1).Mark

のように参照する必要があるのでは(直接内部のフィールド参照するより1回変数で受けた方が良さそうですけど)

投稿2021/02/14 05:24

m.ts10806

総合スコア80875

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

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

nekoyuya

2021/02/14 12:29

ご指摘いただいたようにすることでマーク、数字とも取り出すことができました! ありがとございます!
m.ts10806

2021/02/14 23:40

ただ、フィールドに外部からの直接アクセスは避けるべきですので、まずはセッターゲッターから実装ご検討ください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問