Java 扑克牌

Java 扑克牌

背景

估计是想打扑克了吧

简述

生成一副扑克牌,没有大小王,然后洗牌,将洗牌后的结果输出

思路

扑克牌基本情况:一副牌有52张(没有大小王),四种类型:红桃(Hearts)、方块(Diamonds)、梅花(Clubs)、黑桃(Spades),每种类型有13张牌(A、2、3、4、5、6、7、8、9、10、J、Q、K)。
思路有点堵塞(感觉没有表达好):
1、把一张牌看作一个对象Card,该对象有类型属性type、大小属性size,即定义一个Card类,该类包含type和size属性
2、初始化扑克牌的类型type[] = {“H”, “D”, “C”, “S”}
初始化牌的大小size[] = {“A”,“2”,“3”,“4”,“5”,“6”,“7”,“8”,“9”,“10”,“J”,“Q”,“K”}
3、用一个List</Card/>接收52张扑克牌
4、类型和大小进行双重循环生成扑克牌
5、打乱扑克牌(洗牌):集合类中有shuffle()方法

代码块

import java.util.*; 

public class Pukepai {
	public static void main(String args[]) {
		/** 牌面类型 红心H、方块D、梅花C、黑桃S */
		String type[] = {"H", "D", "C", "S"}; 
		/** 牌面大小 */
		String size[] = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
		/** 存放52张牌 */
		List<Card> list = new ArrayList();
		for(int i = 0;i < type.length ; i++){
			for (int j = 0; j < size.length; j++){
				Card card = new Card();
				card.setType(type[i]);
				card.setSize(size[j]);
				list.add(card);
			}
		}
		System.out.println("shuffle before");
		for (int j=0;j<list.size();j++){
			System.out.printf(list.get(j).getType() + list.get(j).getSize() + " ");
			if (j==list.size()-1){
				System.out.println("");
			}
		}
		/** 洗牌 */
		Collections.shuffle(list);
		/** 输出洗牌结果 */
		System.out.println("shuffle after");
		for (int j=0;j<list.size();j++){
			System.out.printf(list.get(j).getType() + list.get(j).getSize() + " ");
		}
	}
}

class Card {
	
	private String type;
	/**
	 * 牌面类型
	 */
	public void setType(String type){
		this.type = type;
	}
	public String getType(){
		return type;
	}
	/**
	 * 牌面大小
	 */
	private String size;
	
	public void setSize(String size){
		this.size = size;
	}
	public String getSize(){
		return size;
	}
	
}

测试结果

在这里插入图片描述

优化

1.输出不要用字母代替中文。
2.对象的输出可以通过重写类的tostring方法
3.重写card的构造函数,直接传成员变量来创建对象
4.有构造函数就不要创建临时变量

代码块

import java.util.*;

public class Pukepai {
    public static void main(String args[]) {
        /** 牌面类型 */
        String type[] = {"红桃", "方块", "梅花", "黑桃"};
        /** 牌面大小 */
        String size[] = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
        /** 存放52张牌 */
        List<Card> list = new ArrayList();
        for (int i = 0; i < type.length; i++) {
            for (int j = 0; j < size.length; j++) {
                list.add(new Card(type[i],size[j]));
            }
        }
        System.out.println("洗牌前:");
        for (int j = 0; j < list.size(); j++) {
            System.out.printf(list.get(j).toString() + " ");
            if (j == list.size() - 1) {
                System.out.println("");
            }
        }
        /** 洗牌 */
        Collections.shuffle(list);
        /** 输出洗牌结果 */
        System.out.println("洗牌后:");
        for (int j = 0; j < list.size(); j++) {
            System.out.printf(list.get(j).toString() + " ");
        }
    }
}

class Card {

	/**
	 * 牌面类型
	 */
    private String type;
	/**
	 * 牌面大小
	 */
    private String size;

    Card(String type, String size){
		this.type = type;
		this.size = size;
	}
	
	@Override
	public String toString() {
		StringBuilder sb = new StringBuilder();
        sb.append(type);
        sb.append(size);
		return sb.toString();
	}

}

测试结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zcxbd/article/details/82683587