首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >卡片组合索引/数组错误

卡片组合索引/数组错误
EN

Stack Overflow用户
提问于 2014-02-27 01:42:53
回答 1查看 86关注 0票数 0

我正在尝试创建一副扑克牌,它可以自动洗牌,然后按随机顺序输出牌。我遇到了行的错误ArrayIndexOutOfBoundsException

代码语言:javascript
运行
复制
return ranks[rank] + " of " + suits[suit];

代码语言:javascript
运行
复制
System.out.println( C.toString() );

我做错了什么?它输出扑克牌大小,然后偶尔输出一两张卡,然后显示错误代码。提前谢谢。

代码语言:javascript
运行
复制
import java.util.Random;
import java.util.ArrayList;

public class Deck
    {
    private ArrayList<Card> cards;

    Deck()
        {
        cards = new ArrayList<Card>();
        for (int a=0; a<=3; a++)
            {
            for (int b=0; b<=12; b++)
                {
                cards.add( new Card(a,b) );
                }
            }
        }

    public static void main(String[] args)
        {
        Deck deck = new Deck();
        Card C;

        System.out.println( deck.getTotalCards() );

        while (deck.getTotalCards() != 0)
            {
            C = deck.drawFromDeck();
            System.out.println( C.toString() );
            }
        } 


    public class Card
        {
        private int rank,
                    suit;

        private String[] suits = {"Hearts", "Spades", "Diamonds", "Clubs"};
        private String[] ranks = {"Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"};

        Card(int rank, int suit)
            {
            this.rank=rank;
            this.suit=suit;
            }

        public @Override String toString()
            {
            return ranks[rank] + " of " + suits[suit];
            }

        public int getRank()
            {
            return rank;
            }

        public int getSuit()
            {
            return suit;
            }
        }

    public Card drawFromDeck()
        {
        Random generator = new Random();
        int index = generator.nextInt( cards.size() );
        return cards.remove(index);
        }


    public int getTotalCards()
        {
        return cards.size();
        }
    }
EN

回答 1

Stack Overflow用户

发布于 2014-02-27 02:12:32

这里的一切都是好的,但是你向后初始化卡。您的Card构造函数是(rank, suit),而您的Deck构造函数正在创建它们的(suit, rank)

只需在第15行的Deck构造函数中颠倒参数的顺序

代码语言:javascript
运行
复制
cards.add( new Card(a, b) );

应该是

代码语言:javascript
运行
复制
cards.add( new Card(b, a) );

由于a的范围从0到3,因此asuit,应该是构造函数中的第二个参数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22049120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档