ArrayList添加方法编译但不起作用

时间:2017-03-10 14:08:04

标签: java arraylist

我一直在查看代码,但我找不到任何看似不合适的东西。我是编程的新手,所以也许我错过了一些明显的东西,但任何帮助都会受到赞赏。我正在进行的任务是创建一个52卡片组然后设计方法来更改卡片组,卡片正在创建但未添加到ArrayList中。我的甲板类代码是:

import java.util.*;
public class FiftyTwoCardDeck
{
List<Card> totalDeck = new ArrayList<>();

private int deckSize = totalDeck.size();

public FiftyTwoCardDeck()
{
    for(int j=0;j<4;j++) {
        for(int k=0;k<13;k++) {
            String s;
            String c;

            switch(j) {
                case 0:
                s = "Spades";
                break;

                case 1:
                s = "Diamonds";
                break;

                case 2:
                s = "Clubs";
                break;

                case 3:
                s = "Hearts";
                break;
            }

            switch(k) {
                case 0:
                c = "Ace";
                break;

                case 10:
                c = "Jack";
                break;

                case 11:
                c = "Queen";
                break;

                case 12:
                c = "King";
                break;

                default:
                c = ""+(k+1);
                break;
            }

            Card card = new Card(s, c);
            totalDeck.add(card);
        }
    }
}

    public int cardAmount()
    {
        return deckSize;
    }
}

测试者类只创建一个对象:

public class FiftyTwoCardDeckTester
{
    public static void main(String args[])
    {
        FiftyTwoCardDeck deck = new FiftyTwoCardDeck();
    }
}

为牌组制作对象的牌组是:

import java.util.*;
public class Card
{
    public Card(String st, String ct)
    {
        suit = st;
        count = ct;
    }

    public String getSuit()
    {
        return suit;
    }

    public String getCount()
    {
        return count;
    }

    public String suit;
    public String count;
}

3 个答案:

答案 0 :(得分:2)

private int deckSize = totalDeck.size();

public int cardAmount()
{
    return deckSize;
}

您在创建deckSize对象时初始化FiftyTwoCardDeck。它在构造函数运行之前设置为0并且从不更新。当卡片被添加到卡组中时,您需要更新它。

或者,删除变量并让cardAmount()询问列表每次调用它的大小。

public int cardAmount()
{
    return totalDeck.size();
}

答案 1 :(得分:0)

这就是问题所在。

private int deckSize = totalDeck.size();

在执行构造函数体之前初始化此字段。请参阅此答案以获取解释:https://stackoverflow.com/a/14806340/342852

答案 2 :(得分:0)

实际上,List CardscardAmount()夸大了,但0将始终返回deckSize,因为0在创建时被FiftyTwoCardDeck提升public int cardAmount() { return totalDeck.size() }

请改用:

{{1}}