Java 作为参数在枚举中循环

Java 作为参数在枚举中循环,java,loops,enums,iteration,Java,Loops,Enums,Iteration,因此,我正在用Java编写21点代码,并在枚举中存储了我的suit和rank值 public enum Suit { spades, hearts, clubs, diamonds } public enum Rank { two, three, four, five, six, seven, eight, nine, ten, jack, queen, king, ace } 我有一个甲板类,它保存了一堆“卡片”。 卡片包含适合和等级的字段 public class Ca

因此,我正在用Java编写21点代码,并在枚举中存储了我的suit和rank值

public enum Suit
{
   spades, hearts, clubs, diamonds
}



public enum Rank
{
    two, three, four, five, six, seven, eight, nine, ten, jack, queen, king, ace
}
我有一个甲板类,它保存了一堆“卡片”。 卡片包含适合和等级的字段

public class Card
{
    static Suit suit;
    static Rank rank;


    Card(Suit suit, Rank rank)  
    {

    this.suit = suit;
    this.rank = rank;

    }


    public String toString()
    {
    return rank + " of " + suit;
    }

    //getters and setters ommitted
}
牌组中的构造器应该迭代每个花色和等级,并将其作为参数传递,以创建一副52张牌的牌组,但似乎卡在每张牌的最后一个值上,我最终得到52张“梅花a”。我不明白为什么,因为西服和军衔似乎打印正确,只是当它们作为参数传递给add()时,它们的行为似乎不正常

public class Deck
{
    static Stack<Card> d = new Stack<Card>();

    Deck()
    {
    if (!d.isEmpty())
    {
        clear(); //Empties the stack if constructor is called again
    }

    for (Suit suit : Suit.values())
    {
        for (Rank rank : Rank.values())
        {
        //System.out.println(suit + " " + rank);
        //This seems to print the right values

        add(new Card(suit, rank)); //These are stuck on 'clubs' and 'ace'
        }
    }

    System.out.println(d);

    shuffle(); //Method which shuffles the deck

    }

    public static void add(Card c)
    {
    d.addElement(c);
    }

    //shuffle(), clear() and other methods omitted
}
公共类甲板
{
静态堆栈d=新堆栈();
甲板()
{
如果(!d.isEmpty())
{
clear();//如果再次调用构造函数,则清空堆栈
}
for(Suit:Suit.values())
{
for(秩:Rank.values())
{
//系统输出打印项次(套装+“”+等级);
//这似乎打印了正确的值
添加(新卡(套装、等级));//这些卡卡在“俱乐部”和“王牌”上
}
}
系统输出打印ln(d);
shuffle();//洗牌组的方法
}
公共静态无效添加(卡c)
{
d、 增编(c);
}
//省略了shuffle()、clear()和其他方法
}

如果有帮助,可以在上查看完整项目。

这是不正常的。您可以从
Stack
扩展
Deck

public class Deck
{
    static Stack<Card> d = new Stack<Card>();
public class Deck extends Stack<Card> {
    //add, clear are already there from Stack
}

这是不正常的。您可以从
Stack
扩展
Deck

public class Deck
{
    static Stack<Card> d = new Stack<Card>();
public class Deck extends Stack<Card> {
    //add, clear are already there from Stack
}

卡中的套装和等级字段不应该是静态的

你的甲板场也不应该


静态字段是每个类的,所以每次调用时,您的卡构造函数都会覆盖相同的值。

卡中的套装和等级字段不应该是静态的

你的甲板场也不应该

静态字段是每个类的,因此每次调用卡片构造函数时都会覆盖相同的值。

您可以在枚举上调用values()方法

for ((Rank rank : Rank.values()) {
  // do what you want
}
此values()方法由编译器隐式声明。因此它没有列在枚举文档中。

您可以在枚举中调用values()方法

for ((Rank rank : Rank.values()) {
  // do what you want
}

此values()方法由编译器隐式声明。因此,它没有列在Enum doc上。

请确保您了解静态变量是什么。您似乎误解了它们(这是您的问题的原因)。请确保您了解静态变量是什么。你似乎误解了他们(这是你问题的原因)。