List<string> mergedList = Merge(object1, object2);
因此,我的主要方法的第一部分生成了一副牌并完全正常(我已经单独测试过它)。我试图让我的第二个方法 randomCard 从牌组中返回一张随机抽取的牌。我只能打印出来&#39; G&#39;这是我测试,看看它是否工作。非常感谢帮助。谢谢!
答案 0 :(得分:4)
您需要指定返回的值。
card = randomCard(card);
方法cardName = deck[card];
内的分配仅更新方法String
引用cardName
,并且在方法范围之外无效。
另外,为了更好地随机分发卡片,请查看Collections.shuffle()
。有关改组的更多信息,请阅读this blog entry和this one。
ArrayList<String> deck = new ArrayList<String>();
String[] suit = { "Clubs", "Diamonds", "Hearts", "Spades" };
String[] rank = { "2", "3", "4", "5", "6", "7", "8", "9", "10",
"Jack", "Queen", "King", "Ace" };
for (int a=0; a < rank.length; a++) {
for (int b=0; b < suit.length; b++){
deck.add(rank[a] +" of "+ suit[b]);
}
}
Collections.shuffle(deck, new SecureRandom());
String randomCard = deck.get(0);
答案 1 :(得分:2)
您的randomCard
有一些错误。
public static String randomCard() { // no need for an argument
int card = (int)(Math.random()*52); // was 53, but there are only 52 cards -
// you want to generate the number
// between 0 and 51
String cardName = deck[card]; // removed (" ")
return cardName;
}
然后用:
调用方法card = randomCard();
答案 2 :(得分:1)
字符串是不可变的。你的方法
public static String randomCard(String cardName)
不会(也不能)更改传入的String对象。这个
cardName = ("deck[card]");
仅将本地cardName
引用更改为指向新字符串。但是,传入的对象不会更改。因此,您需要将card
显式指定给方法的返回值
card = randomCard(card);
答案 3 :(得分:1)
您应该查看原因:传递字符串的值。 当您指定
时,添加到Weston的解决方案card = randomCard(card);
它实际上在卡变量中指定了返回值,但是当你这样做时
cardName = (deck[card]);
所有这一切都是改变函数randomCard的 cardName 参数的值。