因此,對于家庭作業,我必須撰寫一個程式來處理 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
uj5u.com熱心網友回復:
您正在將字串與==而不是進行比較.equals()。
這是有問題的行:
if ((used[k] == (suit[randS] value[randV])) && (used[k] != null))
首先,您需要翻轉空檢查和值檢查,以防止出現NullPointerException,因為這.equals()是一個方法呼叫(對于操作員==來說這無關緊要)。然后使用方法進行比較,例如:
if ((used[k] != null) && used[k].equals(suit[randS] value[randV]))
除此之外,如果你使用List<String>for代替陣列,你會讓你的生活更輕松,因為在那里你可以簡單地使用方法而不是你自己的回圈 - 但我不知道你的作業是否允許這樣做..contains
為了讓你的程式更快一點,你可以break;在 if 塊的末尾添加一個陳述句,因為你可以在找到重復項時立即中斷 for 回圈。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/433412.html
