我正试图通过java来玩扑克游戏。我想做的第一件事是使用数组分发5张卡片。我已经完成了分发部分,但是如何才能防止同一张卡片被分发两次。换句话说,如何检查数组是否已经包含元素。我希望它能够检测元素是否已经存在于数组中,如果它已经存在,我希望能够更改已经发出两次的卡片,帮助将会非常感谢。我的密码在下面,
import java.util.Random;
import java.util.Scanner;
import java.util.Arrays;
public class Poker
{
public final static String[] numbers = {"❤","♠","♦","♣"};
public final static String[] sign = {"1","2","3","4","5","6","7","8","10","J","Q","K","A"};
private String[] hand = {"","","","",""};
private boolean found;
private Random random;
public Poker()
{
found = false;
String hand[] = {"","","","",""};
int tokens = 10;
Scanner in = new Scanner(System.in);
random = new Random();
}
public void handOut()
{
for (int i = 0; i < 5; i++)
{
int numberRandom = random.nextInt(numbers.length);
int signRandom = random.nextInt(sign.length);
String pickedNumber = numbers[numberRandom];
String pickedSign = sign[signRandom];
String combinedSigns = pickedSign + pickedNumber;
hand[i] = combinedSigns;
System.out.print(hand[i] + " ");
}
System.out.println("\n");
}
}发布于 2013-10-07 02:55:03
您想要做的是将代码分解成不同的方法。您应该有一种生成一张卡的方法,一种检查一张卡是否在手中的方法,以及一种将卡片分发到手上的方法。
public String generateCard() {
int numberRandom = random.nextInt(numbers.length);
int signRandom = random.nextInt(sign.length);
String pickedNumber = numbers[numberRandom];
String pickedSign = sign[signRandom];
return pickedSign + pickedNumber;
}
public static boolean cardIsInHand(String card) {
for(int i = 0; i < 5; i++) {
if(hand[i] != null && hand[i].contains(card)) {
return true;
}
}
return false;
}
public static void handout() {
for (int i = 0; i < 5; i++) {
String card = generateCard();
while(cardIsInHand(card)) {
card = generateCard();
}
hand[i] = card;
}
}发布于 2013-10-07 02:45:36
你选择的术语是..。呃..。有趣:-)
卡值是一个“面值”,而不是一个符号。不管是心还是钻石等等,那是它的“西服”,而不是它的号码。
但是,关于这个问题。我相信最好的方法是从你的面容和西装阵列中构建一个完整的52张牌,然后使用费舍尔·耶茨洗牌来分发卡片。
这是一种从没有重复的数组中随机选择元素的好方法。其优点是数组中的项目实际上不需要预先调整。有关其工作方式的详细信息可以找到here。
发布于 2013-10-07 02:45:38
如果您可以使用集合框架而不是数组,那么创建一个Stack并用所有52张卡填充它。然后打电话给Collections.shuffle()。最后设置hand[i]=(deck name).pop()
一旦一张牌从堆栈中弹出,它就会从甲板上被移除,这样它就不能再被处理了。
https://stackoverflow.com/questions/19216306
复制相似问题