解答例 - j2.lesson04.Poker

package j2.lesson04;

import java.io.*;

import j2.lesson04.card.CardDeck;

/**
 * 課題1704 - 解答例 (1/2).
 * ポーカーゲーム.
 @author arakawa
 @version $Id: Poker_java.rps,v 1.1 2006/03/06 12:56:14 java2005 Exp $
 */
public class Poker {

    /**
     * ポーカーを開始する.
     @param args 無視される
     @throws IOException 入力中に例外が発生した場合
     */
    public static void main(String[] argsthrows IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        
        CardDeck deck = new CardDeck();
        deck.shuffle();
        PokerHand hand = new PokerHand(
            deck.takeFirst(),
            deck.takeFirst(),
            deck.takeFirst(),
            deck.takeFirst(),
            deck.takeFirst()
            );
        System.out.println("ポーカーを開始します。");
        showHand(hand);
        System.out.print("チェンジするカードを選択 (例-acd):");
        int[] change = inputToChangeList(reader.readLine());
        if (change.length == 0) {
            System.out.println("チェンジはしません。");
        }
        else {
            System.out.println(change.length + "枚チェンジ。");
            for (int i = 0; i < change.length; i++) {
                int at = change[i];
                System.out.print("[change] ");
                System.out.print(hand.get(at));
                hand.change(at, deck.takeFirst());
                System.out.print(" -> ");
                System.out.println(hand.get(at));
            }
            showHand(hand);
        }
        System.out.println("役: " + hand.getRank());
    }
    
    /**
     * 手札を表示する。
     @param hand 表示する手札
     */
    private static void showHand(PokerHand hand) {
        System.out.println("a: " + hand.get(0));
        System.out.println("b: " + hand.get(1));
        System.out.println("c: " + hand.get(2));
        System.out.println("d: " + hand.get(3));
        System.out.println("e: " + hand.get(4));
    }
    
    /**
     * 入力を元にチェンジするカードの位置を整数の配列に変換する
     @param input 入力された文字列
     @return 変換すべきカードの位置が入った配列
     */
    private static int[] inputToChangeList(String input) {
        boolean[] target = new boolean[5];
        char[] norm = input.toLowerCase().toCharArray();
        int count = 0;
        for (int i = 0; i < norm.length; i++) {
            char c = norm[i];
            if (c == 'a') {
                target[0true;
                count++;
            }
            else if (c == 'b') {
                target[1true;
                count++;
            }
            else if (c == 'c') {
                target[2true;
                count++;
            }
            else if (c == 'd') {
                target[3true;
                count++;
            }
            else if (c == 'e') {
                target[4true;
                count++;
            }
        }
        
        int[] list = new int[count];
        int index = 0;
        for (int i = 0; i < target.length; i++) {
            if (target[i]) {
                list[index= i;
                index++;
            }
        }
        return list;
    }
}