【问题标题】:ArrayList add method compiling but not workingArrayList添加方法编译但不起作用
【发布时间】:2017-07-31 21:54:00
【问题描述】:

我一直在查看代码,但我找不到任何看起来不对劲的地方。我是编程新手,所以也许我遗漏了一些明显的东西,但任何帮助将不胜感激。我正在做的任务是制作一个 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;
}

【问题讨论】:

  • 您的 deckSize 始终为零。您应该在您的 cardAmount 方法中返回 totalDeck.size()
  • 为了帮助您学习语言,您应该学习如何通过断点和普通调试器来调试语言。看看这篇文章如何:vogella.com/tutorials/EclipseDebugging/article.html
  • 感谢大家的帮助,非常感谢。我去看看调试链接 DogEatDog

标签: java arraylist


【解决方案1】:
private int deckSize = totalDeck.size();

public int cardAmount()
{
    return deckSize;
}

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

或者,删除变量并让cardAmount() 每次调用时询问列表有多大。

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

【讨论】:

    【解决方案2】:

    这就是问题所在。

    private int deckSize = totalDeck.size();
    

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

    【讨论】:

      【解决方案3】:

      实际上,您的ListCards 膨胀,但是cardAmount() 将始终返回0,因为deckSize 在创建FiftyTwoCardDeck 时被初始化为0

      改用这个:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-02
        相关资源
        最近更新 更多