必威体育Betway必威体育官网
当前位置:首页 > IT技术

Java 扑克牌 - 洗牌

时间:2019-07-29 06:10:00来源:IT技术作者:seo实验室小编阅读:79次「手机版」
 

扑克牌洗牌

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();
	}

}

测试结果

在这里插入图片描述

相关阅读

Java技术对网站建设有什么好处

  工程师为消费类设备开发了这种语言,并使其与当时适度的CPU兼容时保持了简单性。从那时起,这种面向对象的语言已用于创建简单到

JavaScript主要作用是什么呢

 JavaScript主要作用是什么呢?学习编程的同学对JavaScript并不陌生,JavaScript是前端技术中非常重要的内容,是网站搭建必不可少的

java.lang.UnsupportedClassVersionError

截图:                                                            错误日志: Exception in thr

Java之反射——类对象

学了一段时间Java了,但是还是很菜,看到反射这一节的时候,就有点厌烦,看不下去了,过了一段时间后我又翻了回来,因为要学习后面的,所以反射

Java 混淆器(obfuscate)

Java 混淆器就是给.class加密以防止反编译的工具 开源的  RetroGuard   http://www.retrologic.com/ IBM的  JAX    

分享到:

栏目导航

推荐阅读

热门阅读