发牌码错误及更好的发牌解决方案

  • 本文关键字:解决方案 更好 错误 java
  • 更新时间 :
  • 英文 :

import java.util.ArrayList;
import java.util.*; 
public class test {
public static void main(String[] args) throws Exception {
ArrayList<String> names = new ArrayList<String>();
ArrayList<String> shufflecard = new ArrayList<String>();
String[] cards = {"cA", "c2", "c3", "c4", "c5", "c6", "c7", "c8", "c9", "cX", "cJ", "cQ", "cK", 
"dA", "d2", "d3", "d4", "d5", "d6", "d7", "d8", "d9", "dX", "dJ", "dQ", "dK", 
"sA", "s2", "s3", "s4", "s5", "s6", "s7", "s8", "s9", "sX", "sJ", "sQ", "sK", 
"hA", "h2", "h3", "h4", "h5", "h6", "h7", "h8", "h9", "hX", "hJ", "hQ", "hK"};

for (int i = 0; i < cards.length; i++){
shufflecard.add(cards[i]);
}
Collections.shuffle(shufflecard);
//System.out.println(shufflecard);
names.add("1");
names.add("2");
names.add("3");
//int playersize =  names.size();
//card Card = new card();
card.cards();
//System.out.println(names);
//System.out.println(playersize);
//String[] shucardarr = new card.shufflecard();
//System.out.println(shufflecard);
String player1 = names.get(0);
String player2 = names.get(1);
String player3 = names.get(2);
ArrayList<String> player1card = new ArrayList<String>();
ArrayList<String> player2card = new ArrayList<String>();
ArrayList<String> player3card = new ArrayList<String>();
boolean cardnoemp = true;
while(cardnoemp){
int i = 0;
player1card.add(shufflecard.get(i));
i++;
player2card.add(shufflecard.get(i));
i++;
player3card.add(shufflecard.get(i));
for(int j = 0; j < 3; j++) {
shufflecard.remove(j);
}
if(shufflecard.isEmpty()){
break;}
}


System.out.println(player1 + player1card);
System.out.println(player2 + player2card);
System.out.println(player3 + player3card);
}}

这是我对发牌项目的测试我用它来发牌给每个玩家,但我得到java。lang。indexoutofboundsexception:索引2超出长度2

while(cardnoemp){
int i = 0;
player1card.add(shufflecard.get(i));
i++;
player2card.add(shufflecard.get(i));
i++;
player3card.add(shufflecard.get(i));
for(int j = 0; j < 3; j++) {
shufflecard.remove(j);
}
if(shufflecard.isEmpty()){
break;}
}

我试着阅读我在网上找到的每一个问题,但我找不到解决方案。

我需要使用没有单独套装和号码的卡片,我在网上找不到合适的代码

如果我能得到一个更好的发牌方法或为我解决这个问题,我将非常感激。谢谢你

不需要像"现实生活中"那样依次发牌。

Collections.shuffle将顺序随机化,并且"所有排列发生的概率近似相等"。这意味着你给每个玩家的牌和你"在现实生活中"发牌的牌是一样的。就好像你只是给每个玩家一个连续的洗牌块。

(参见"从洗牌牌中发牌的顺序重要吗?"在Quora)。

所以,一个更简单的解决方案是:

int third = shufflecard.size()/3;
// Give each player a third of the cards.
player1card.addAll(shufflecard.subList(0, third));
player2card.addAll(shufflecard.subList(third, 2*third));
player3card.addAll(shufflecard.subList(2*third, 3*third));
// Clear shufflecard, if you need to.
shufflecard.clear();

最新更新