【发布时间】:2015-12-10 16:44:39
【问题描述】:
我想用算法对 cardList 和 valueList 进行洗牌,但是当我对每一个都使用洗牌集合时,它们使用不同的算法。因此,当我拉出一张牌时,它将是牌组中的一张随机牌,并且不会再次出现同一张牌。
public class BlackJack {
public static void main(String[] args) {
Random rand = new Random();
Scanner input =new Scanner(System.in);
ArrayList<String> cardList= new ArrayList<String>();
ArrayList<String> cardShuffle= new ArrayList<String>();
ArrayList<Integer> valueList= new ArrayList<Integer>();
ArrayList<String> valueShuffle= new ArrayList<String>();
cardList = card(cardList);
valueList = value(valueList);
Collections.shuffle(cardList);
Collections.shuffle(valueList);
System.out.println(cardList);
System.out.println(valueList);
}
private static ArrayList card(ArrayList<String> cardList){
String cards = null;
String suits = null;
int cardCount = 0;
for(int s = 1;s<5; s++){
switch (s){
case 1: suits = " of Heart"; break;
case 2: suits = " of Diamond"; break;
case 3: suits = " of Spades"; break;
case 4: suits = " of Clubs"; break;
}
for(int c = 1;c<14; c++){
switch (c){
case 1: cards = "2"; break;
case 2: cards = "3"; break;
case 3: cards = "4"; break;
case 4: cards = "5"; break;
case 5: cards = "6"; break;
case 6: cards = "7"; break;
case 7: cards = "8"; break;
case 8: cards = "9"; break;
case 9: cards = "10"; break;
case 10: cards = "Jack"; break;
case 11: cards = "Queen"; break;
case 12: cards = "King"; break;
case 13: cards = "Ace"; break;
}
cardList.add(cardCount, cards + suits);
cardCount++;
}
}
return cardList;
}
private static ArrayList<Integer> value(ArrayList<Integer> valueList){
int v = 2;
int counter = 1;
for(int c = 1;c<52; c++){
if(v > 10){
v = 10;
}
valueList.add(v);
v++;
counter++;
if(counter>13){
counter = 1;
v=2;
}
}
return valueList;
}
}
编辑:我按照@Cinnam 的建议做了第二堂课,然后使用 For int 用随机数洗牌。
public class BlackJack {
public static void main(String[] args) {
Random rand = new Random();
Scanner input =new Scanner(System.in);
ArrayList<String> cardList= Cards.card();
ArrayList<Integer> valueList= Cards.value();
ArrayList<String> cardShuffle= new ArrayList<String>();
ArrayList<Integer> valueShuffle= new ArrayList<Integer>();
int r = 0;
for(int i = 0; i < 52; i++){
r = rand.nextInt(52);
cardShuffle.add(i,cardList.get(r));
valueShuffle.add(i,valueList.get(r));
}
System.out.println(cardShuffle);
}
【问题讨论】:
-
你的 cardShuffle 和 valueShuffle 数组永远不会被使用。
-
看起来您需要创建一个可以同时接收 ArrayList 并对其进行随机播放的方法。我在您的代码中没有看到。我看到了两种不同的方法来打乱两个不同的数据集