洗牌问题 代码我想这样写 感觉逻辑没问题啊 但运行不出效果 请指教?

来源:7-1 简易扑克牌游戏

张禹专

2017-09-08 00:53


System.out.println("开始洗牌");

do{

int ran=(int)(Math.random()*52);

Poker p=poke.get(ran);

if(poke1.contains(p)){

continue;

}else{

poke1.add(p);

}

}while(poke1.size()<=52);

System.out.println("洗牌后顺序:");

for(Poker p:poke1){

System.out.print(p.color+p.number+" ");

}

}


写回答 关注

1回答

  • 风舞煊天
    2017-09-08 17:46:54

    逻辑是没有问题,但是算法有问题。因为每次都是从来原来的扑克牌里随机取出一张牌添加到洗好的扑克牌里,当你往洗好的牌里追加牌的时候,刚开始可能抽出的牌不会重复(重复概率相对较低),但是越往后,重复添加牌的可能就越大,这样容易报:java.lang.OutOfMemoryError: Java heap space的错。建议在抽出牌的同时删除原始牌堆的牌,然后缩小random的范围,这样添加的牌就不会重复。如下:

    System.out.println("开始洗牌");

    do{

    int ran=(int)(Math.random()*poke.size());

    Poker p=poke.get(ran);

    poke1.add(p);

    poke.remove(p);

    }

    }while(poke1.size()<=52);

    System.out.println("洗牌后顺序:");

    for(Poker p:poke1){

    System.out.print(p.color+p.number+" ");

    }

    }


Java入门第三季

Java中你必须懂得常用技能,不容错过的精彩,快来加入吧

409792 学习 · 4340 问题

查看课程

相似问题