Reputation: 13
I have four nearly identical while-lopps in my program. The program is going through 3 of them but getting stuck in the fourth (the last).
What I am trying to achieve is a program that gives every player 13 random playing cards.
I have add the relevant piece of the program below.
public static void main(String[] args) {
String[] cards = new String[53];
cards[1] = "1k"; cards[2] = "2k"; cards[3] = "3k"; cards[4] = "4k"; cards[5] = "5k"; cards[6] = "6k";
cards[7] = "7k"; cards[8] = "8k"; cards[9] = "9k"; cards[10] = "10k"; cards[11] = "11k"; cards[12] = "12k";
cards[13] = "13k";
cards[14] = "1h"; cards[15] = "2h"; cards[16] = "3h"; cards[17] = "4h"; cards[18] = "5h"; cards[19] = "6h";
cards[20] = "7h"; cards[21] = "8h"; cards[22] = "9h"; cards[23] = "10h"; cards[24] = "11h"; cards[25] = "12h";
cards[26] = "13h";
cards[27] = "1r"; cards[28] = "2r"; cards[29] = "3r"; cards[30] = "4r"; cards[31] = "5r"; cards[32] = "6r";
cards[33] = "7r"; cards[34] = "8r"; cards[35] = "9r"; cards[36] = "10r"; cards[37] = "11r"; cards[38] = "12r";
cards[39] = "13k";
cards[40] = "1s"; cards[41] = "2s"; cards[42] = "3s"; cards[43] = "4s"; cards[44] = "5s"; cards[45] = "6s";
cards[46] = "7s"; cards[47] = "8s"; cards[48] = "9s"; cards[49] = "10s"; cards[50] = "11s"; cards[51] = "12s";
cards[52] = "13s";
String[] player1 = new String[14];
String[] player2 = new String[14];
String[] player4 = new String[14];
String[] player3 = new String[14];
String used = "";
int i1 = 0;
int i2 = 0;
int i3 = 0;
int i4 = 0;
while (true) {
Random rand1 = new Random();
int irand1 = rand1.nextInt(51) + 1 ;
String card = cards[irand1];
if (i1 == 14)
break;
if (used.contains(card))
continue;
else {
player1[i1] = card;
used = used + " " + card;
i1++;
}
}
while (true) {
Random rand2 = new Random();
int irand2 = rand2.nextInt(51) + 1 ;
String card2 = cards[irand2];
if (i2 == 14)
break;
if ( used.contains(card2))
continue;
else {
player2[i2] = card2;
used = used + " " + card2;
i2++;
}
}
while (true) {
Random rand3 = new Random();
int irand3 = rand3.nextInt(51) + 1;
String card3 = cards[irand3];
if (i3 == 14)
break;
if (used.contains(card3))
continue;
else {
player3[i3] = card3;
used = used + " " + card3;
i3++;
}
}
while (true) {
Random rand4 = new Random();
int irand4 = rand4.nextInt(51) + 1;
String card4 = cards[irand4];
if (i4 == 14)
break;
if (used.contains(card4))
continue;
else {
player4[i4] = card4;
used = used + " " + card4;
i4++;
}
}
}
}
To clarify, the while-loop the program is getting stuck in is:
while (true) {
Random rand4 = new Random();
int irand4 = rand4.nextInt(51) + 1;
String card4 = cards[irand4];
if (i4 == 14)
break;
if (used.contains(card4))
continue;
else {
player4[i4] = card4;
used = used + " " + card4;
i4++;
}
}
Any help would be appreciated, Thanks!
Upvotes: 0
Views: 51
Reputation: 201399
First, you could save yourself some time by initializing and declaring your cards
(and you repeated "13k" with cards[39] = "13k";
- so you don't have 52 unique cards). Second, I would use Collections.shuffle(List)
to deal the cards. That could be done with something like,
String[] cards = {
"1k", "2k", "3k", "4k", "5k", "6k", "7k", "8k", "9k", "10k", "11k", "12k", "13k",
"1r", "2r", "3r", "4r", "5r", "6r", "7r", "8r", "9r", "10r", "11r", "12r", "13r",
"1h", "2h", "3h", "4h", "5h", "6h", "7h", "8h", "9h", "10h", "11h", "12h", "13h",
"1s", "2s", "3s", "4s", "5s", "6s", "7s", "8s", "9s", "10s", "11s", "12s", "13s"
};
List<String> al = new ArrayList<>(Arrays.asList(cards));
Collections.shuffle(al);
String[] player1 = al.subList(0, 13).toArray(new String[13]);
String[] player2 = al.subList(13, 26).toArray(new String[13]);
String[] player3 = al.subList(26, 39).toArray(new String[13]);
String[] player4 = al.subList(39, al.size()).toArray(new String[13]);
System.out.println(Arrays.toString(player1));
System.out.println(Arrays.toString(player2));
System.out.println(Arrays.toString(player3));
System.out.println(Arrays.toString(player4));
Upvotes: 3