###前提・実現したいこと
Javaでトランプのカードを取り出すときに11以上のカードであればJ, Q, Kの文字列を出力するプログラムを実現したいです。
###発生している問題
char型の配列でJ, Q, Kを管理してるんですけど、
System.out.println()で出力する際に文字コードとして出力されてしまいます。
###該当のソースコード
Java
1import java.util.Scanner; 2import java.util.Random; 3 4class CardApp { 5 public static void main(String[] args) { 6 // 定数定義 7 final int MAX_CARD = 52; // 全カードの枚数 8 final int SPADE = 0; // スペード 9 final int DIA = 1; // ダイア 10 final int HEART = 2; // ハート 11 final int CLOVER = 3; // クローバー 12 13 // 変数定義 14 int remCard = 52; // 残りカードの枚数 15 int n = 0; // 何枚引くか入力した値を格納する変数 16 17 // インスタンス宣言 18 Scanner sc = new Scanner(System.in); 19 Random r = new Random(); 20 21 // カード用の配列を生成 22 char[] chara = {'J', 'Q', 'K'}; // 11以上のカード 23 boolean[][] card = new boolean[4][13]; // 全カード 24 boolean isPull = false; // そのカードが引かれたかをチェックする変数 25 26 for (int i = 0; i < card.length; i++) { 27 for (int j = 0; j < card[i].length; j++) { 28 card[i][j] = isPull; 29 } 30 } 31 32 // メインループ処理 33 while (true) { 34 // 何枚引くか入力する 35 do { 36 System.out.printf("何枚引きますか(%d / %d)(終了 : 0)?", remCard, MAX_CARD); 37 n = sc.nextInt(); 38 } while (n > remCard || n < 0); 39 40 // アプリ終了条件 41 if (n == 0) { 42 System.out.println("アプリケーションを終了します。"); 43 break; 44 } 45 46 remCard -= n; 47 48 49 // 引くカードの値をtrueにする 50 int cnt = 0; 51 while (true) { 52 int idx1 = r.nextInt(4), idx2 = r.nextInt(13); 53 54 if (!(card[idx1][idx2])) { 55 card[idx1][idx2] = true; 56 cnt++; 57 // カード文字列判断処理 58 switch (idx1) { 59 case SPADE: System.out.print("S" + (idx2 >= 11 ? chara[reChar(idx2 + 1)] : reChar(idx2 + 1)) + (cnt != n ? " " : "\n")); break; 60 case DIA: System.out.print("D" + (idx2 >= 11 ? chara[reChar(idx2 + 1)] : reChar(idx2 + 1)) + (cnt != n ? " " : "\n")); break; 61 case HEART: System.out.print("H" + (idx2 >= 11 ? chara[reChar(idx2 + 1)] : reChar(idx2 + 1)) + (cnt != n ? " " : "\n")); break; 62 case CLOVER: System.out.print("C" + (idx2 >= 11 ? chara[reChar(idx2 + 1)] : reChar(idx2 + 1)) + (cnt != n ? " " : "\n")); break; 63 default: break; 64 } 65 } 66 // 指定された引く数分カードを引いたらループ終了 67 if (cnt == n) break; 68 } 69 // アプリ終了条件 70 if (remCard == 0) { 71 System.out.println("アプリケーションを終了します。"); 72 break; 73 } 74 } 75 76 } 77 78 /** 79 * 11以上のカードだったら文字列配列の指定要素を返し、そうでなければ数値を返します。 80 * @param num 文字列判断対象の数値 81 * @return 11以上であれば文字列配列の指定要素 82 */ 83 static int reChar (int num) { 84 switch (num) { 85 case 11 : return 0; 86 case 12 : return 1; 87 case 13 : return 2; 88 default : return num; 89 } 90 } 91} 92 93
###試したこと
String型の配列で管理をすると、問題なく想定通りの挙動をしてくれました。
###補足情報(言語/FW/ツール等のバージョンなど)
言語: Java
Version : 1.8.0