一个set直接存放51张卡,每次用Random随机取出来一个?好像作为最后一题是有点简单了...

解决方案 »

  1.   

    从card[0]开始扁历,把当前的card 与card[rand.nextInt(51)]交换,遍历一次后,也就随机得差不多了
      

  2.   

    直接在set里面放入1到52,让后迭代他们就行了 ,因为set是无序的,每次得到的都不同
      

  3.   

    import java.util.Collections;
    import java.util.LinkedList;
    import java.util.List;public class CartDemo {
    public static void main(String[] args) {
    int[] cards = new CartDemo().getCards();
    for (int i : cards) {
    System.out.print(i+"  ");
    }
    }
    public int[] getCards(){
    List<Integer> list = new LinkedList<Integer>();
    int index = 1;
    for (int i = 0; i < 52; i++) {
    list.add(index++);
    }
    Collections.shuffle(list);
    int[] cards = new int[52];
    for (int i = 0; i < cards.length; i++) {
    cards[i] = list.remove(0);
    }
    return cards;
    }
    }
    这个是别人帮我写的一个,实现的很简单,代码简洁清晰
      

  4.   

    这个是用Ramdom编写的,性能应该不太好
    import java.util.Random;
    public class CartDemo1 {
    public static void main(String[] args) {
    int[] cards = new CartDemo1().getCards();
    for (int i : cards) {
    System.out.print(i+"  ");
    }
    }
    public int[] getCards(){
    boolean[] isGet = new boolean[52];
    int[] cards = new int[52];
    Random r = new Random();
    int index = 0;
    while(true){
    int i = r.nextInt(52);
    if(isGet[i]){
    continue;
    }
    isGet[i] = true;
    cards[index++] = i+1;
    if(index == 52){
    break;
    }
    }
    return cards;
    }
    }
      

  5.   

    用他自带的一个洗牌函数很快就能实现分牌的随机性Collections.shuffle(),就不要用随机数了。
      

  6.   

    这个听别人说,不行。因为set虽然无序,但不能模拟随机过程。因为它的原理是hashCode(),hash表虽然无序,但是它是经过一个运算的。别人这么说的,不明白啊
      

  7.   


    用链表保存最开始的数字,比较合适,因为移除对象效率很高。
    设计链表保存 1 - 52 之间的数字 。
    LinkList pukeList ;第一步:实例化一个 int[52] 的数组第二步:
    int index = 0 ;
    whlie(pukeList.length > 0 ){
        int i = Random.nextInt(pukeList.length);  // 去数组长度里面的随机数
        int[index++] = pukeList.remove(i);
    }
      

  8.   


    public static void main(String[] args) {
    Random r = new Random();
    LinkedList<Integer> array = new LinkedList<Integer>();
    for (int i = 0; i < 52; i++) {
    array.add(i);
    }

    int puke[] = new int[52];

    int i = 0 ;
    while(array.size() > 0){
    int index = r.nextInt(array.size());
    puke[i++] = array.remove(index);
    }

    System.out.println(Arrays.toString(puke));
    }
      

  9.   

    如果不考虑的话 看下这个public class RandomPuke {
       public static void main(String[] args) {
     List<Integer> list = new ArrayList<Integer>();
     for(int i=1;i<=52;i++){
     list.add(i);    // 添加到数组列表去。
     }
     Collections.shuffle(list); // 让列表内容随机重组
     int[] card =new int[52];
     for(int s=0;s<list.size();s++){
     card[s]=list.get(s);     // 放到数组里
      }
     System.out.println(Arrays.toString(card));  //打印出来
        }
    }
      

  10.   

    可以参考代码:Java 扑克发牌算法实现,下载地址:http://www.zuidaima.com/share/1550463274224640.htm