import java.util.Arrays;
import java.util.Random;public class BasicDebug {
public static void main(String[] args) {
//用于保存产生的随机数是否已用
boolean[] isExist = new boolean[52];
Random r = new Random();
//存储不重复0-51之间的随机数
int[] card = new int[52];
//保存产生的随机数
int temp;
int count = 0;
boolean flag = false;
while (count < 52) {
temp = r.nextInt(52);
flag=false;
//判读产生的随机数是否已经存在了
for (int i = 0; i < 52; i++) {
if (isExist[i]) {
flag = true;
//如果已经找到就不用继续找了
break;
}
}
//产生的随即数已经存在,将进入下一循环
if(flag) continue;
//将产生的随机数,设为已经存在
isExist[temp] = true;
card[count++] = temp;
System.out.print(temp + "\t");
}
System.out.println();
//为了清楚的显示产生的随机数,进行了排序
Arrays.sort(card);
for (int j : card) {
System.out.print(j + "\t");
}
}
}

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【adrain_sengtang】截止到2008-07-14 16:03:30的历史汇总数据(不包括此帖):
    发帖的总数量:7                        发帖的总分数:200                      每贴平均分数:28                       
    回帖的总数量:10                       得分贴总数量:0                        回帖的得分率:0%                       
    结贴的总数量:7                        结贴的总分数:200                      
    无满意结贴数:1                        无满意结贴分:20                       
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:14.29 %               无满意结分率:10.00 %                  
    敬礼!
      

  2.   

    推荐参考http://topic.csdn.net/u/20080704/12/d75b0072-868c-41fc-b423-504eb6bd1852.html
      

  3.   

    import java.util.HashSet;
    import java.util.Iterator;
    import java.util.Random;
    import java.util.Set;public class Test {
    public static void main(String[] args) {
    Set<Integer> s = new HashSet<Integer>();
    Random r = new Random();
    int size = s.size();
    while (size != 52) {
    int rdm = r.nextInt(100);
    s.add(new Integer(rdm));
    size = s.size();
    }

    Iterator<Integer> iter = s.iterator();
    while (iter.hasNext()) {
    Integer tmp = iter.next();
    System.out.print(tmp.intValue() + " ");
    }

    }
    }可以考虑使用HashSet
      

  4.   

    发牌算法先给扑克牌中每张牌设定一个编号,下面算法实现的编号规则如下:  
    红桃按照从小到大依次为:1-13  方块按照从小到大依次为:14-26  黑桃按照从小到大依次为:27-39  梅花按照从小到大依次为:40-52  小王为53,大王为54
    算法实现如下:
    首先按照以上编号规则初始化一个包含108个数字的数组每次随机从该数组中抽取一个数字,分配给保存玩家数据的数组                        
                          
     实现该功能的代码如下所示:
    import java.util.*;
    /**
     * 发牌算法的实现
     * 要求:把2副牌,也就是108张,发给4个人,留8张底牌
     */
    public class Exec{
           public static void main(String[] args){
                  //存储108张牌的数组
                  int[] total = new int[108];
                  //存储四个玩家的牌
                  int[][] player = new int[4][25];
                  //存储当前剩余牌的数量
                  int leftNum = 108;
                  //随机数字
                  int ranNumber;
                  //随机对象
                  Random random = new Random();
                  
                  //初始化数组
                  for(int i = 0;i < total.length;i++){
                         total[i] = (i + 1) % 54;
                         //处理大小王编号
                         if(total[i] == 0){
                                total[i] = 54;   
                         }
                                
                  }
                  
                  //循环发牌
                  for(int i = 0;i < 25;i++){
                         //为每个人发牌
                         for(int j = 0;j < player.length;j++){
                                //生成随机下标
                                ranNumber = random.nextInt(leftNum);
                                //发牌
                                player[j][i] = total[ranNumber];
                                //移动已经发过的牌
                                total[ranNumber] = total[leftNum - 1];
                                //可发牌的数量减少1
                                leftNum--;      
                         }     
                  }
                  
                  //循环输出玩家手中的牌
                  for(int i = 0;i < player.length;i++){
                         for(int j = 0;j < player[i].length;j++){
                                System.out.print("  " + player[i][j]);    
                         }
                         System.out.println();
                  }
                  //底牌
                  for(int i = 0;i < 8;i++){
                         System.out.print("  " + total[i]);   
                  }
                  System.out.println();
           }
    }运行结果: 
    C:\java>java Exec
    50 31 52 24 10 29 29 32 36 46 8 28 27 41 17 17 38 41 46 18 34 24 4 21 6
    22 53 54 42 16 48 38 35 31 2 45 26 47 32 51 9 49 45 34 27 3 11 54 25 1
    37 5 10 13 39 42 36 6 47 4 30 37 20 12 14 8 3 40 30 12 23 52 43 9 23
    15 49 14 35 7 44 33 40 48 44 1 19 43 39 20 15 7 51 26 11 2 8 16 21 18 5
    25 2 50 53 33 19 22 13
      

  5.   

    倚情王子明白了我的意思这个过程模拟了随机抽牌
    就是从0-51中抽取数,然后放到card数组里
    只所以对card进行了排序,是想看是不是放的不重复并且全抽出来了
      

  6.   

    import java.util.Arrays;
    import java.util.Random;public class BasicDebug {
        public static void main(String[] args) {
            // 用于保存产生的随机数是否已用
            boolean[] isExist = new boolean[52];
            Random r = new Random();
            // 存储不重复0-51之间的随机数
            int[] card = new int[52];
            // 保存产生的随机数
            int temp;
            int count = 0;
            while (count < 52) {
                temp = r.nextInt(52);
                // 判读产生的随机数是否已经存在了,产生的随即数已经存在,将进入下一循环
                if (isExist[temp]) continue;
                //将产生的随机数,设为已经存在 
                isExist[temp] = true;
                card[count++] = temp;
                System.out.print(temp + "\t");
            }
            System.out.println();
            //为了清楚的显示产生的随机数,进行了排序 
            Arrays.sort(card);
            for (int j : card) {
                System.out.print(j + "\t");
            }
        }
    }
      

  7.   

    下面这部分代码有问题://判读产生的随机数是否已经存在了 
    for (int i = 0; i < 52; i++) { 
    if (isExist[i]) { 
    flag = true; 
    //如果已经找到就不用继续找了 
    break;