完成Pocker类的shuffle方法,将参数数组元素乱序,要求乱序后的数组中,每一个元素都不在原来的索引上。

解决方案 »

  1.   

    package test.com;public class Pocker {
    //假设扑克牌以BA,H2,C3,D4格式存储,B,H,C,D--黑桃,红桃,草花,方片,A~K为牌面值
    private String[] pocker = new String[52];
    private String[] num = new String[]{"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
    private char[] flower = new char[]{'B','H','C','D'};

    public Pocker(){
    int n = 0;
    for(int i = 0;i < flower.length;i++){
    for(int j = 0;j < num.length;j++){
    pocker[n++] = (flower[i] + num[j]);
    }
    }
    }

    public void print(){
    for(int i = 1;i <= pocker.length;i++){
    System.out.print(pocker[i -1] + " ");
    if(i % num.length == 0){
    System.out.println();
    }
    }
    }

    /*洗牌方法*/
    public void shuffle(){
    for(int i = 0;i < pocker.length;i++){
    String temp = pocker[i];
    int n = (int)(Math.random() * pocker.length);//随机一个0-51的数
    pocker[i] = pocker[n];
    pocker[n] = temp;
    }
    }

    }
    package test.com;public class Test { public static void main(String[] args) {
    // TODO Auto-generated method stub
    Pocker mPocker = new Pocker();
    System.out.println("洗牌前");
    mPocker.print(); System.out.println("洗牌后");
    mPocker.shuffle();
    mPocker.print();
    }}结果:
    洗牌前
    BA B2 B3 B4 B5 B6 B7 B8 B9 B10 BJ BQ BK 
    HA H2 H3 H4 H5 H6 H7 H8 H9 H10 HJ HQ HK 
    CA C2 C3 C4 C5 C6 C7 C8 C9 C10 CJ CQ CK 
    DA D2 D3 D4 D5 D6 D7 D8 D9 D10 DJ DQ DK 
    洗牌后
    HJ B4 D10 CJ D4 DQ H2 H10 H9 C4 BK B6 D8 
    B10 H6 BA B9 D5 B8 H4 CA D9 HQ CQ C2 CK 
    C6 C3 B2 C7 DK C9 BJ DA D3 C5 D2 D6 H7 
    C8 B3 B5 H3 BQ D7 B7 DJ C10 HA HK H8 H5