前提
Javaの初心者です。
トランプでHigh&lowを作成しております。
引いたカードの情報を取得ができません。数字とマークがうまく取得ができず、実行しても必ず「0」になってしまいます。
ゲーム画面の作成まではできております。
数字とマークを取得できるようにするにはどのようにすればよいのでしょうか。
よろしくお願いいたします。
実現したいこと
カードを引いて数字とマークを取得できるようになりたい。
発生している問題・エラーメッセージ
Cannot invoke "Kensyu.Card$Deck.GetCard()" because "deck" is null
カードを引いた情報を取得できない。
該当のソースコード
Java
1Main.Java クラス 2package Kensyu1; 3 4import Kensyu1.Card.Deck; 5 6 7public class Main { 8 private static Deck Deck() { 9 // TODO 自動生成されたメソッド・スタブ 10 return null; 11 } 12 public static void main(String[] args) { 13 // 山札を生成 14 Deck deck = Deck(); 15 16 // 姉がカードを引く 17 Sensyu ane = new Sensyu(); 18 ane.Draw(deck); 19 20 // 弟がカードを引く 21 Sensyu otouto = new Sensyu(); 22 otouto.Draw(deck); 23 24 // ゲーム画面を生成 25 new Gamegamen(ane, otouto); 26 27 return; 28 } 29 30 31 32} 33 34Sensyu.java クラス 35package Kensyu1; 36 37import Kensyu1.Card.Deck; 38 39public class Sensyu { 40 41 // メンバ変数定義 42 // 選手が持っているカード情報 43 private Card card_info; 44 45 // 初期化処理 46 public Sensyu(){ 47 card_info = new Card(); // オブジェクトを生成 48 49 // カード情報を初期化 50 card_info.no = 0; // 数字 51 card_info.suit = 0; // マーク 52 } 53 54 // カードを1枚引く 55 public void Draw(Deck deck) 56 { 57 // 引いたカード情報を取得 58 card_info = deck.GetCard(); 59 return; 60 } 61 62 //カードの数字を取得 63 public int GetNo(){ 64 return card_info.no; 65 } 66 67 //カードのマークを取得 68 public int GetSuit(){ 69 return card_info.suit; 70 } 71 72} 73 74Deck.java クラス 75 76package Kensyu; 77 78import java.util.ArrayList; 79import java.util.Arrays; 80import java.util.Collections; 81import java.util.List; 82class Card{ 83 84 int suit; // マーク(0:スペード/1:ハート/2:ダイヤ/3:クラブ) 85 int no; // 数字(A=1/J=11/Q=12/K=13) 86 87 public class Deck { 88 //カード枚数 89 final int GOUKEI_CARD = 52; 90 91 // メンバ変数定義 92 // カードリスト(山札) 0~51の要素を入れ、それぞれマークと数字を割り当てる 93 // 0 ~12:スペードA~K / 13~25:ハートA~K / 26~38:ダイヤA~K / 39~51:クラブA~K 94 private List<Integer> card_list; 95 96 // 次に取り出すカード番号(1枚引くごとに1加算する) 97 private int card_index = 0; 98 99 // 初期化処理 100 public Deck() 101 { 102 // 次に取り出すカード番号を初期化 103 card_index = 0; // 1枚目 104 105 // 山札を初期化 106 card_list = new ArrayList<>(Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51)); 107 108 // 山札をシャッフルする 109 Collections.shuffle(card_list); 110 } 111 112 // 山札からカードを1枚取り出し、そのカードのマークと数字をリターンする 113 public Card GetCard() 114 { 115 Card card_info = new Card(); // カード情報格納用 116 int card_no = 0; // カード番号 117 118 // カードを一枚取り出して、カード番号(0~51のいずれか)を取得 119 card_no = (int) card_list.get(card_index); // リストの先頭要素を取り出す 120 121 // 1枚取り出したのでカード番号を1加算 122 card_index++; 123 124 // 山札をすべて引いた場合、山札を初期化する 125 if( GOUKEI_CARD <= card_index ) 126 { 127 card_index = 0; // 先頭に戻す 128 Collections.shuffle(card_list); // 山札をシャッフルする 129 } 130 131 card_info.suit = card_no / 13; // マーク=カード番号を13で割った商 132 card_info.no = (card_no % 13) + 1; // 数字=カード番号を13で割った余り+1 133 134 return card_info; 135 } 136 } 137 138} 139
試したこと
カード情報で数字とマークをそれぞれ取得するように記載をしてみましたがうまくいきませんでした。
補足情報(FW/ツールのバージョンなど)
実行環境 JavaSE-16(P)(Java16)

