编写一个扑克牌的洗牌的算法:假设有54张牌,分别用1-54的数字来表示,并保存在一个数组中,设计一个算法使数组中的数字随机存放,并且无重复和缺失的现象。打印洗牌前后的结果。要求用2种方法实现,并找出较为优化的一种;
  
  就这个题   我才开始学JAVA   明天老师要检查~~     那个哥哥能帮帮我 
  
  我学到2维数组了~~         
 我谢谢大家了~~ 
真的很头疼~~~~~ 

解决方案 »

  1.   

    ///只有1个方法
    import java.util.Random;
            
    public class Code {
        
        /** Creates a new instance of Code */
        public Code() {
            this.r=new Random();
            this.codes=new int[54];
        }    public void xiPai(){
            for (int i=0;i<54;i++){
                int n=r.nextInt(54)+1;
                this.codes[i]=n;
                for (int j=0;j<i;j++){
                    if (this.codes[j]==n){
                        i--;
                        break;
                    }
                }
            }
        }
        
        public void printCode(){
            for (int i=0;i<54;i++){
                if (i%10==0)
                    System.out.println();
                System.out.print(this.codes[i]+" ");
            }
        }
        
        public static void main(String[] args){
            Code c=new Code();
            c.xiPai();
            c.printCode();
        }
        
        private int[] codes=null;
        Random r=null;
    }
      

  2.   

    //package com.lihaifeng.common;public class Print13 {
    public static void main(String[] args) {
    int puKePai;//定义产生的一张扑克牌
    int n = 0;//
    int[] puKe = new int[54];//定义存放扑克牌的数组
    temp: while (n < 54) {//产生随机数,既随机产生扑克点数 puKePai = (int) ((Math.random() * 100)) % 54 + 1;//产生1到54的随机数;
    for (int k = 0; k < n; k++) {
    if (puKePai == puKe[k])//产生的随机数与数组里的数比较,如果已经存在,则跳出循环重新产生
    continue temp;
    }
    puKe[n] = puKePai;//产生的随机数不存在数组里,放入数组中;
    n++;// }
    for (int m = 1; m < 55; m++) {//打印产生的扑克牌;
    System.out.print(m + ": " + puKe[m - 1] + "  ");
    if (m % 10 == 0) {
    System.out.println("  ");
    }
    } }
    }上面的代码不知道是不是你要的意思!!
      

  3.   

    可以写得更简单点public class Main {
        
        public static void main (String[] args) {
            final int n = 54;
            int[] iarr = new int[n];
            java.util.Random r = new java.util.Random ();
            int j = 0;
            while(j < n) {
                int x = r.nextInt (n);
                if (iarr[x] == 0) {
                    j++;
                    iarr[x] = j;
                }
            }
            for (int a : iarr) {
                System.out.print (a + " ");
            }
        }
        
    }
      

  4.   

    import java.util.Random;public class appletTest {
    public static void main(String[] args) {
    int[] puKe = new int[54];// 定义存放扑克牌的数组
    Random r = new Random();
            int i=0;
    while(i<54){
    int temp=0;
    int current = Math.abs(r.nextInt()) % 54 + 1;
    for (int j = 0; j < i; j++) {
    if (puKe[j] == current){
    temp=1;
    break;
    }
                   }
    if(temp==0){
    puKe[i] = current;
    ++i;
    }
        }
    for (int m = 1; m < 55; m++) {// 打印产生的扑克牌;
    System.out.print(m + ": " + puKe[m - 1] + "  ");
    if (m % 10 == 0) {
    System.out.println("  ");
    }
    } }
    }
      

  5.   

    for (int a : iarr) 是什么意思?