为什么我的输出结果中有的牌会少了牌的花色?

来源:7-1 简易扑克牌游戏

moummm

2017-08-07 01:59

public class Card implements Comparable<Card>{
    private String  cType;//牌的花色
    private String cNum;//牌的序号
    private static final int cardNum = 52;//牌的数量
    private static final int typeNum = 13;//每种扑克牌数量

    public Card(String cType,String cNum){
        this.cType=cType;
        this.cNum=cNum;
    }

    public Card(){}

    public String getcType() {
        return cType;
    }

    public void setcType(String cType) {
        this.cType = cType;
    }

    public String getcNum() {
        return cNum;
    }

    public void setcNum(String cNumber) {
        this.cNum = cNum;
    }

    //开始创建扑克牌
    public static List<Card> createdCard(){
        System.out.println("开始创建扑克牌。。。。。。。");
        List<Card> cards = new ArrayList<Card>();
        for (int i=0;i<cardNum;i++){
            String newValue = "";
            int temp = i%typeNum;
            switch (temp){
                case 1:newValue="A";break;
                case 11:newValue="J";break;
                case 12:newValue="Q";break;
                case 0:newValue="K";break;
                default:newValue=String.valueOf(temp);
            }
            String colorValue = "";
            switch (temp){
                case 0:colorValue="黑桃";break;
                case 1:colorValue="红桃";break;
                case 2:colorValue="梅花";break;
                case 3:colorValue="方块";break;
            }
            cards.add(new Card(colorValue,newValue));
        }
        System.out.println("创建扑克牌成功");
        return cards;
    }

    //洗牌
    public static List<Card> shuffle(List<Card> cards){
        Collections.shuffle(cards);
        return cards;
    }

    //根据牌值和花色比较牌的大小
    public int compareTo(Card c){
        List<String> baseValue = Arrays.asList("2","3","4","5","6","7","8","9","10","J","Q","K","A");
        List<String> baseColor = Arrays.asList("方块","梅花","红桃","黑桃");
        if (baseValue.indexOf(this.cNum)==baseValue.indexOf(c.cNum))
            return Integer.valueOf(baseColor.indexOf(this.cType)).compareTo(Integer.valueOf(baseColor.indexOf(c.cType)));
        else
            return Integer.valueOf(baseValue.indexOf(this.cNum)).compareTo(Integer.valueOf(baseValue.indexOf(c.cNum)));
//        List<String> valueBase = Arrays.asList("2","3","4","5","6","7","8","9","10","J","Q","K","A");
//        List<String> colorBase = Arrays.asList("方块","梅花","红桃","黑桃");
//        if(valueBase.indexOf(this.cNum) == valueBase.indexOf(c.cNum))
//            return Integer.valueOf(colorBase.indexOf(this.cType)).compareTo(Integer.valueOf(colorBase.indexOf(c.getcType())));
//        else
//            return Integer.valueOf(valueBase.indexOf(this.cNum)).compareTo(Integer.valueOf(valueBase.indexOf(c.getcNum())));
    }

    public String toString(){
        return cType+cNum;
    }
}
class Player{
    private int id;
    private String name;
    private List<Card> cards;

    public Player(){}

    public Player(int id,String name){
        this.id = id;
        this.name=name;
        cards = new ArrayList<Card>();
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<Card> getCards() {
        return cards;
    }

    public void setCards(List<Card> cards) {
        this.cards = cards;
    }
}
public class Test {
    List<Player> players = new ArrayList<Player>();
    //创建玩家
    public List<Player> createdPlayer() {
        Scanner input = new Scanner(System.in);
        System.out.println("开始创建玩家.....");
        int playerNum=2;
        int id ;
        String name;
        while (true) {
            try{
                for (int i = 0; i < playerNum; i++) {
                    System.out.println("请输入第" + (i + 1) + "名玩家的ID:");
                    id = input.nextInt();
                    System.out.println("请输入第" + (i + 1) + "名玩家的姓名:");
                    name = input.next();
                    players.add(new Player(id,name));
                }
                System.out.println("创建玩家成功!");
                for (int i = 0; i < playerNum; i++) {
                    System.out.println("欢迎玩家" + players.get(i).getName() + "加入游戏!");
                }
                break;
                } catch(Exception e){
                    System.out.println("输入错误,请重新输入玩家id");
                    input = new Scanner(System.in);
                }
            }
            return players;
        }

        public void playingGame(){
            List<Card> cards = Card.createdCard();
            List<Card> sCards = Card.shuffle(cards);
            createdPlayer();
            System.out.println("开始发牌。。。。。。");
            int handCardNum=3;
            int cardNum = handCardNum*players.size();
            Card card;
            for (int i=0;i<cardNum;i++){
                card = sCards.get(i);
                players.get(i%players.size()).getCards().add(card);
            }
            System.out.println("————发牌结束");
            System.out.println("开始游戏。。。。。。");
            Card maxCard = new Card("方块","2");
            int winPlayer = 0;
            for (int j=0;j<players.size();j++){
                for (int i=0;i<handCardNum;i++){
                    Collections.sort(players.get(j).getCards());
                    Collections.reverse(players.get(j).getCards());
                    if(maxCard.compareTo(players.get(j).getCards().get(i))<0) {
                        maxCard=players.get(j).getCards().get(i);
                        winPlayer = j;
                    }
                }
                System.out.println("玩家"+players.get(j).getName()+"最大的牌为:"+players.get(j).getCards().get(0).toString());
            }
                System.out.println("玩家"+players.get(winPlayer).getName()+"获胜!");
                for (int j=0;j<players.size();j++) {
                    System.out.println("玩家" + players.get(j).getName() + "的手牌为:");
                    for (int i=0;i<handCardNum;i++)
                        System.out.println(players.get(j).getCards().get(i).getcType()+players.get(j).getCards().get(i).getcNum());
                }
        }

    public static void main(String[] args) {
        Test test = new Test();
        test.playingGame();
    }
}


写回答 关注

4回答

  • Illidan_stormrage
    2017-08-08 11:17:07
    已采纳

    第一个代码块里花色赋值的地方有错,temp的取值有13个(0-12),但你在switch语句块中只给temp值为0 1 2 3这四个牌赋值了花色 即整副牌中只有K A 2 3这四张有花色

    Illida... 回复moummm

    哈哈,一起学习 我连思路都没有呢

    2017-08-09 10:27:16

    共 2 条回复 >

  • qq_为鹿摘下那朵桔梗花_0
    2017-08-16 03:10:29

    受益匪浅

  • qq_为鹿摘下那朵桔梗花_0
    2017-08-15 23:00:12

    111

  • moummm
    2017-08-09 10:38:11

    你能发现问题,说明你也挺厉害的

Java入门第三季

Java中你必须懂得常用技能,不容错过的精彩,快来加入吧

409784 学习 · 4339 问题

查看课程

相似问题