为什么我的程序一直在发重复的卡?(JAVA)



所以对于家庭作业任务,我必须制作一个程序,处理N(命令行输入(数量的扑克组(5张牌(。我有一个for循环,可以检查是否使用了一张卡,但仍然会打印出重复的卡。如有任何帮助,我们将不胜感激。

检查重复的代码

do {///check for dupes
bUsed = false;
randS = (int) (Math.random() * 4);
randV = (int) (Math.random() * 13);

for (int k = 0; k < 52; k++) {
value[randV]);
if ((used[k] == (suit[randS] + value[randV])) && (used[k] != null)) {
bUsed = true;
}
}

} while (bUsed);///end check

完整代码

public class Deal {
public static void main(String[] args) {
String[] suit = {"Hearts", "Diamonds", "Spades", "Clubs"};
String[] value = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
String[] used = new String[52];
boolean bUsed = false;
int usedC = 0;
int N = Integer.parseInt(args[0]);
// int N = 4;
if (N <= 10) {
/////////check for max
for (int i = 0; i < N; i++) {/////////print N amount of decks
System.out.println("Deck " + (i + 1));
for (int j = 0; j < 5; j++) {/////////print 5 cards
int randV = 0;
int randS = 0;
do {///check for dupes
bUsed = false;
randS = (int) (Math.random() * 4);
randV = (int) (Math.random() * 13);

for (int k = 0; k < 52; k++) {

if ((used[k] == (suit[randS] + value[randV])) && (used[k] != null)) {
bUsed = true;
}
}

} while (bUsed);///end check
used[usedC] = suit[randS] + value[randV];
System.out.println(suit[randS] + " " + value[randV]);
usedC++;
}////end print 5 cards
System.out.println();
}///end print amount of decks
} else {
System.out.println("Too many decks requested");
}
}

}

输出示例

java Deal.java 5甲板1俱乐部6俱乐部10俱乐部J红心Q黑桃J

甲板2红心大战4红心大战7红心大战A俱乐部J钻石3

甲板3黑桃K钻石3钻石Q钻石4球杆2

甲板4黑桃7钻石7钻石3俱乐部A钻石9

甲板5球杆2黑桃4钻石4钻石3黑桃7

您将字符串与==而不是.equals()进行比较。

这是一条有问题的线路:

if ((used[k] == (suit[randS] + value[randV])) && (used[k] != null))

首先,您需要翻转null检查和value检查,以防止NullPointerException,因为.equals()是一个方法调用(对于运算符==,这无关紧要(。然后使用该方法进行比较,如:

if ((used[k] != null) && used[k].equals(suit[randS] + value[randV]))

除此之外,如果你用List<String>代替数组来表示,你的生活会轻松很多,因为在那里你可以简单地使用.contains方法而不是你自己的循环,但我不知道你的家庭作业是否允许这样做。

为了让你的程序更快一点,你可以在if块的末尾添加一个break;语句,因为你可以在发现重复的语句后立即中断for循环。

相关内容

  • 没有找到相关文章

最新更新