我怎样才能使用私人随机播放器

时间:2016-10-06 15:25:45

标签: java methods

我的问题是我似乎无法在类中使用我的new VueRouter({ routes: [ { path: '/foo', component: Foo }, { path: '/bar', component: Bar } ] }) 方法shuffle()(必须是私有的)。不太确定我是否应该在private方法中使用它或在CardDeck构造函数中使用它。我也不太确定我的编码是否正确。任何建议/提示将不胜感激!

drawNextCard()

主:

CardDeck()

我的测试输出是

import java.util.*;
public class CardDeck
{
    private String[] ranks = {"2", "3", "4", "5", "6", "7", "8", "9", "10",
                    "J", "Q", "K", "A" };
    private char[] suits = {'s','h','d','c'};
    private Card[] cards = new Card[13];
    private int currentCard;

    CardDeck()
    {
        Card newCard;

        for(int i=0; i<4; i++)
        {
            for(int j=0; j<13; j++)
            {
                cards[j] = new Card(this.ranks[j], this.suits[i]);
            }
        }

    }

    public void testing() //just for testing 
    {
        System.out.println(this.suits[0]);
    }   

    public Card drawNextCard()
    {
        return cards[currentCard++];
    }

    private void shuffle()
    {
        Card[] tmp = new Card[200];
        for (int i = 0; i < cards.length; i++)
        {
            int index = i + (int)(Math.random() * (cards.length));

            tmp[i] = cards[i];
            cards[i] = cards[index];
            cards[index] = tmp[i];
        } 
    }
}

1 个答案:

答案 0 :(得分:0)

int index = i + (int)(Math.random() * (cards.length));

您获得IOB异常的原因是由于上述声明。您的卡的索引不能超过12,但上述声明有可能达到12以上。因此,以下是替换上述声明的可能选项:

  1. int index = (int)(Math.random() * (cards.length));限制条件是 - 卡片可以自行更换,卡片可以换回原来的位置。
  2. 另一种选择是使用Collections.shuffle():

    private void shuffle() { List<Card> cardList = Arrays.asList(cards); Collections.shuffle(cardList); cards = cardList.toArray(cards); }

  3. 对于你在评论部分中的问题,关于如何调用shuffle,这取决于你想要调用它的位置。如果它定义在同一个类中,则只需将其命名为shuffle();。如果它在主要课程或其他课程中,您可以在课程实例之后调用它,例如CardDeck cardDeck = new CardDeck(); cardDeck.shuffle();