java - Java 的洗牌和数组问题

标签 java

我的 Java 程序 Black Jack 出现问题。我似乎无法计算出我的“this.cards[o++]”,因为它总是进入 ArrayIndexOutOfBoundException。但是如果我将其更改为“this.cards[j] OR this.cards[i]”,它不会收到错误,但我知道它是错误的。

以下是错误:

**this.cards[o++]** 
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 13
        at CardDeck.<init>(CardDeck.java:18)
        at BlackJoker.main(BlackJoker.java:17)

**this.cards[j]**
null
Kc
Qc
8c
null
null

**this.cards[i]**
null
Ac
Ah
null
null
Ad

这是我的代码:

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;
        int o = 0;
        for(int i=0; i<this.suits.length; i++)
        {   
            for(int j=0; j<this.ranks.length; j++)
            {
                this.cards[o++] = new Card(this.ranks[j], this.suits[i]);
            }
        }
        this.shuffle();
    }

    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[13];
        for (int i = 0; i < cards.length; i++)
        {
            int index = (int)(Math.random() * (cards.length));

            tmp[index] = cards[i];
            cards[i] = cards[index];
            cards[index] = tmp[i];
        } 
    }
}
<小时/>
public class BlackJoker
{
    public static void main(String[] args)
    {
        CardDeck cardDeck = new CardDeck();

        //cardDeck.testing();
        System.out.println(cardDeck.drawNextCard());
        System.out.println(cardDeck.drawNextCard());
        System.out.println(cardDeck.drawNextCard());
        System.out.println(cardDeck.drawNextCard());
        System.out.println(cardDeck.drawNextCard());
        System.out.println(cardDeck.drawNextCard());
        //System.out.println(cardDeck.drawNextCard());
    }
}
<小时/>

最佳答案

您正在分配一个只能容纳 13 张卡的数组:

private Card[] cards = new Card[13];

尝试将其设为 52:

private Card[] cards = new Card[52];

关于java - Java 的洗牌和数组问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39904543/

相关文章:

java - 如何让单例重新初始化变量?

java - 使用 super 关键字迭代通用列表

java - 访问另一个类的公共(public)方法时出现问题

java - 更改符号模式/匹配器中的标签

java - 使用哨兵停止线程不起作用

java - JsonParseException : Invalid UTF-8 middle byte 0x2d

java - wsdl java 类区分大小写

java - 显示正确对应的 SQLite 数据库 Android/Java 的数据

java - 在 tomcat 8.5 中获取 ClassNotFoundException

Java JFrame 操作执行