A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

这是一个发牌洗牌的模拟动作,有两种洗牌动作,重复很多次可以明显感觉到两者时间差异
[Java] 纯文本查看 复制代码
package first;
/**
 * 扑克牌类
 * 有以下属性
 * 颜色 大小由大到小顺序:黑桃 红心 梅花 方块; 
 * 数字 大小由大到小顺序:2 A K Q J 10 9 8 7 6 5 4 3
 * @author Administrator
 * 大小编号 编号数字越小则越大
 */
public class Pai {
/**
 * 颜色 大小由大到小顺序:黑桃 红心 梅花 方块
 */
private String colur;
/**
 * 数字 大小由大到小顺序:2 A K Q J 10 9 8 7 6 5 4 3
 */
private String num;
/**
 * 大小编号 编号数字越小则越大
 */
private int ID;
public String getColur() {
	return colur;
}
public void setColur(String colur) {
	this.colur = colur;
}
public String getNum() {
	return num;
}
public void setNum(String num) {
	this.num = num;
}
public int getID() {
	return ID;
}
public void setID(int iD) {
	ID = iD;
}
}



package first;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
import java.util.Set;
/**
 * 创建牌,洗牌类
 * @author Administrator
 *
 */
public class BuildingAndChangePai {
	public BuildingAndChangePai(){
		this.newPai=new ArrayList<Pai>();
		this.oldPai=new HashSet<Pai>();
		this.randomPai=new ArrayList<Pai>();
	}
	public static void main(String[] args) {
		BuildingAndChangePai it=new BuildingAndChangePai();
		//it.builder();
		//it.showNewPai();
		//it.SetChangers();;
		//it.showSetPai();
		//it.randomPai();
		//it.showRandom();
		//以下时间与电脑配置有关
		//以下循环需约1分20秒
		//for(int i=0;i<10000000;i++){it=new BuildingAndChangePai();it.builder();it.randomPai();}
		//以下循环需约30秒
		for(int i=0;i<10000000;i++){it=new BuildingAndChangePai();it.builder();it.newRandom();}
		it.showNewPai();
		it.showRandom();
	}
	/**
	 * 一盒新牌
	 */
	private List<Pai> newPai;
	/**
	 * 一盒random洗的牌
	 */
	private List<Pai> randomPai;
	/**
	 * 一盒洗好的牌
	 */
	private Set<Pai> oldPai;
	/**
	 * 创建一副牌的方法
	 */
	public void builder(){
		//先创建两个List,按照顺序加入颜色和数字
		List<String>colurs=new ArrayList<String>();
		colurs.add("黑桃");
		colurs.add("红心");
		colurs.add("梅花");
		colurs.add("方片");
		List<String>nums=new ArrayList<String>();
		nums.add("2");
		nums.add("A");
		nums.add("K");
		nums.add("Q");
		nums.add("J");
		nums.add("10");
		nums.add("9");
		nums.add("8");
		nums.add("7");
		nums.add("6");
		nums.add("5");
		nums.add("4");
		nums.add("3");
		//创建int变量id;用于接下来统计大小顺序
		int id=1;
		//嵌套循环创建牌,外循环控制数字,内循环控制花色
		
		for(int i=0;i<nums.size();i++){
			for(int j=0;j<colurs.size();j++){
				Pai pai=new Pai();
				pai.setColur(colurs.get(j));
				pai.setNum(nums.get(i));
				pai.setID(id);
				newPai.add(pai);
				id++;
			}
		}
	}
	/**
	 * 新牌展示
	 */
	public void showNewPai(){
		System.out.println("现有新牌如下:");
		for(int i=0;i<(newPai.size());i++){
		System.out.print(newPai.get(i).getID()+":"+newPai.get(i).getColur()+newPai.get(i).getNum()+"   ");
		if((i+1)%4==0)System.out.println();
		}
	}
	/**
	 * 创建list-set的方法
	 */
	public void SetChangers(){
		for(Pai pai:newPai){
			oldPai.add(pai);
			}
	}
	/**
	 * 洗好的牌展示
	 */
	public void showSetPai(){
		System.out.println("现有list-set交换牌如下:");
		int i=0;
		for(Pai newPai:oldPai){
			System.out.print(newPai.getID()+":"+newPai.getColur()+newPai.getNum()+"   ");
			i++;
			if(i%4==0){System.out.println();}
		}
		
	}
	/**
	 * random方法
	 */
	public void randomPai(){
		Random random=new Random();
		for(int i=0;i<52;i++){
		int j;
		Pai pai;
		do{
			j=random.nextInt(52);
			pai=newPai.get(j);
		}while(randomPai.contains(pai));
		randomPai.add(pai);
		}
	}
	/**
	 * 新的random方法
	 */
	public void newRandom(){
		Random random=new Random();
		for(int i=0;i<52;i++){
			int j;
			Pai pai;
			j=random.nextInt(newPai.size());
			pai=newPai.get(j);
			randomPai.add(pai);
			newPai.remove(j);
		}
	}
	
	/**
	 * 展示randomPai
	 */
	public void showRandom(){
		System.out.println("现有random牌如下:");
		for(int i=0;i<(randomPai.size());i++){
		System.out.print(randomPai.get(i).getID()+":"+randomPai.get(i).getColur()+randomPai.get(i).getNum()+"   ");
		if((i+1)%4==0)System.out.println();
		}
	}
}

2 个回复

倒序浏览
此帖仅作者可见
使用道具 举报
此帖仅作者可见
使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马