亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

洗牌問題 代碼我想這樣寫 感覺邏輯沒問題啊 但運行不出效果 請指教?


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下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號