Java 洗牌演算法
阿新 • • 發佈:2020-12-30
- 設計一個撲克洗牌演算法。將 52 張牌(不包括大、小王)用物件的形式表示,每張牌包括花色和大小。大小按如下序號排列: 2 、 3 、 4 、 5 、 6 、 7 、 8 、 9 、 10 、 J 、 Q 、 K 、 A ,花色為:“黑桃”,“花子”,“紅桃”,“方片”,首先將撲克按順序存放到一個一維陣列中,然後按洗牌演算法進行洗牌,輸出洗完後的撲克牌序列。
public class PuKe {
String hua;
String num;
public PuKe() {
//養成寫無參構造方法的習慣
}
public PuKe(String hua, String num) {
this.hua=hua;
this.num=num;
}
public String toString() {
return "["+hua+num+"]";
}
public static void main(String[] args) {
// TODO 自動生成的方法存根
String h[]= {"黑桃","花子","紅桃","方片"};
String n[]= {"2","3" ,"4","5","6","7","8","9","10","J","Q","K","A"};
PuKe p[]=new PuKe[52];
int c=0;
for(int k=0;k<13;k++) {
for(int j=0;j<4;j++) {
p[c]=new PuKe(h[j],n[k]);
/*p[c].hua=h[j];//不能通過此方法賦值,因為未賦值前為null
p[c].num=n[k];
System.out.print(p[c]+"\n");*/
c++;
}
}
//輸出賦值後的撲克
for(int k=0;k<p.length;k++) {
System.out.print(p[k]+"\t");
if((k+1)%13==0)//k+1
System.out.println();
}
//利用隨機交換進行洗牌
for(int k=0;k<p.length;k++) {
int a=(int)(Math.random()*52);//0~51
if(!p[k].equals(p[a])){
PuKe temp=p[k];
p[k]=p[a];
p[a]=temp;
}
}
//輸出洗牌後的撲克
System.out.println("--------輸出洗牌後的撲克--------");
for(int k=0;k<p.length;k++) {
System.out.print(p[k]+"\t");
if((k+1)%13==0)//k+1
System.out.println();
}
}
}