你这个程序有问题吧,本意是打乱扑克的次序吧。
b[i] = a[r];
a[r] = a[n - 1];
n--;
这里不对吧!

解决方案 »

  1.   

    a b c d e  从5 选一  ,假设选了ca b c d e    a b d e c  从4选一,假设选ba b d e c   a d e b c专业名称
    http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle
      

  2.   

    public class ArrayTest { public static void main(String[] args) {

    //定义一个数组a
    String[] a = { "红桃1", "红桃2", "红桃3", "红桃4", "红桃5", "红桃6", "红桃7", "红桃8",
    "红桃9", "红桃10", "红桃j", "红桃q", "红桃k", "黑桃1", "黑桃2", "黑桃3", "黑桃4",
    "黑桃5", "黑桃6", "黑桃7", "黑桃8", "黑桃9", "黑桃10", "黑桃j", "黑桃q", "黑桃k",
    "方块1", "方块2", "方块3", "方块4", "方块5", "方块6", "方块7", "方块8", "方块9",
    "方块10", "方块j", "方块q", "方块k", "梅花1", "梅花2", "梅花3", "梅花4", "梅花5",
    "梅花6", "梅花7", "梅花8", "梅花9", "梅花10", "梅花j", "梅花q", "梅花k" };
    //定义一个数组b,长度为52
    String[] b = new String[52];
    //将数组a的长度赋给n
    int n = a.length;
    //对数组b进行循环
    for (int i = 0; i < b.length; i++) {
    //随机一个0到n之间的值赋值给r
    int r = (int) (Math.random() * n);
    //数组a[r]赋给b[i]
    b[i] = a[r];
    //数组a逆循环赋给a[r]
    a[r] = a[n - 1];
    n--;
    System.out.print(b[i] + " ");
    }
    }
    }
      

  3.   

    您好。我这段是没看懂本意是想从这个固定数组随机输出一个数!我自己比较笨的方法就是先随机52个数字,然后用switch 检测数字 ,给一个个的case定义花色牌面!我太笨了!
      

  4.   

    自己运行下多看下就明白了。逻辑要清晰啊。 
    如果r是第一个,那么a数组最后一个就会把第一个替换掉,这时候n-1,再次执行,然后逻辑一样!这样就会把a数组打乱有可能重复,b数组里面的值是打乱后的,但不会重复。
      

  5.   

      没太听懂,你是说,给每张牌定义一张图片?
    那就用Map容器吧,key是52张牌,value的图片路径,以下是代码:
      static Map brands=new HashMap();

    public static void main(String[] args) {
    TestBrand tb=new TestBrand();

    String[] a = {"a1","a2","a3","a4","a5","a6","a7","a8","a9","a10","a11","a12","a13","b1","b2","b3","b4","b5","b6","b7","b8","b9",
    "b10","b11","b12","b13","c1","c2","c3","c4","c5","c6","c7","c8","c9","c10","c11","c12","c13","d1","d2","d3","d4",
    "d5","d6","d7","d8","d9","d10","d11","d12","d13"};
    //修改了下代码a代表红桃,b代表黑桃,c代表方块,d代表梅花
    String[] b = new String[52];
    int n = a.length;
    for(int i = 0; i < b.length; i++) {

    puts(a[i].charAt(0),a[i]);

    }
    System.out.println(brands.get("c2"));;
    }
    public static void puts(char key,String brand){

    switch (key) {
    case 'a':
    method(1,brand);
    break;
    case 'b':
    method(2,brand);
    break;
    case 'c':
    method(3,brand);
    break;
    default:
    method(4,brand);
    break;
    }
    }
    public static void method(int i,String brand){
    int str =Integer.parseInt(brand.substring(1).trim());
    switch (str) {
    case 1:
    if(i==1){
    brands.put(brand, "红桃1图片路径");
    }else if(i==2){
    brands.put(brand, "黑桃1图片路径");
    }else if(i==3){
    brands.put(brand, "方块1图片路径");
    }else{
    brands.put(brand, "梅花1图片路径");
    }
    break;
    case 2:
    if(i==1){
    brands.put(brand, "红桃2图片路径");
    }else if(i==2){
    brands.put(brand, "黑桃2图片路径");
    }else if(i==3){
    brands.put(brand, "方块2图片路径");
    }else{
    brands.put(brand, "梅花2图片路径");
    }
    break;
    default:
    break;
    }

    }
      

  6.   

    这个带动图的挺好理解
    http://bost.ocks.org/mike/shuffle/这个是简体中文版的
    http://blog.csdn.net/huagong_adu/article/details/7621603
    http://www.cnblogs.com/Jerry-Chou/archive/2012/01/04/2311610.html这个页面也挺好,收藏了
    http://en.wikipedia.org/wiki/List_of_algorithms