为了账号安全,请及时绑定邮箱和手机立即绑定

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


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 回答

逻辑是没有问题,但是算法有问题。因为每次都是从来原来的扑克牌里随机取出一张牌添加到洗好的扑克牌里,当你往洗好的牌里追加牌的时候,刚开始可能抽出的牌不会重复(重复概率相对较低),但是越往后,重复添加牌的可能就越大,这样容易报: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+" ");

}

}


1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信