通过/返回不起作用

时间:2015-05-03 19:45:00

标签: java

List<string> mergedList = Merge(object1, object2);

因此,我的主要方法的第一部分生成了一副牌并完全正常(我已经单独测试过它)。我试图让我的第二个方法 randomCard 从牌组中返回一张随机抽取的牌。我只能打印出来&#39; G&#39;这是我测试,看看它是否工作。非常感谢帮助。谢谢!

4 个答案:

答案 0 :(得分:4)

您需要指定返回的值。

card = randomCard(card);

方法cardName = deck[card];内的分配仅更新方法String引用cardName,并且在方法范围之外无效。

另外,为了更好地随机分发卡片,请查看Collections.shuffle()。有关改组的更多信息,请阅读this blog entrythis 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 参数的值。