Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建所有可能的扑克牌(一副牌)_Java_Collections - Fatal编程技术网

Java 创建所有可能的扑克牌(一副牌)

Java 创建所有可能的扑克牌(一副牌),java,collections,Java,Collections,比方说,我正在尝试模拟玩标准扑克牌 我有这样的想法: class Face { Set<Character> Faces = new HashSet<Character>( Arrays.asList('2','3','4','5','6','7','8','9','T','J', 'Q', 'K', 'A') ); } 类面{ Set Faces=新哈希集( asList('2','3','4','5','6','7','8','9','T','J

比方说,我正在尝试模拟玩标准扑克牌

我有这样的想法:

class Face {
  Set<Character> Faces = new HashSet<Character>(
      Arrays.asList('2','3','4','5','6','7','8','9','T','J', 'Q', 'K', 'A')
  );
}
类面{
Set Faces=新哈希集(
asList('2','3','4','5','6','7','8','9','T','J','Q','K','A'))
);
}
像这样的:

class Face {
  Set<Character> Faces = new HashSet<Character>(
      Arrays.asList('2','3','4','5','6','7','8','9','T','J', 'Q', 'K', 'A')
  );
}
public enum Suit{心形、钻石、黑桃、梅花}


如何创建集合(如集合或链表)中最适合此集合的对象,以及集合中每对对象的类型。

正如@Progressive_重载所评论的,这可能是最好的方法

卡片类别:

enum Suit {HEART, DIAMONDS, SPADES, CLUBS}
enum Rank {TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING, ACE}
class Card {
   public Rank rank;
   public Suit suit;

   public Card (Rank r, Suit s) {
     rank = r; suit = s;
   }
}
生成:

List<Card> deck = new ArrayList<Card>();

for (Suit s : Suit.values()) {
  for (Rank r : Rank.values()) {
    deck.add(new Card(r, s));
  }
}
List deck=newarraylist();
对于(Suit s:Suit.values()){
for(秩r:Rank.values()){
甲板。添加(新卡(r,s));
}
}

我假设,通过有序对(a,b),你的意思是a.face这是一个很好的模式,可以制作套装的
enum
,队伍的
enum
,然后循环通过
enum>值

Olien04有,但他的代码没有编译。出于这个原因,我在他的基础上添加了这个答案,使用了构造函数和toString方法

enum Suit {HEART, DIAMONDS, SPADES, CLUBS}
enum Rank {TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING, ACE}

public class Card {
    Rank rank;
    Suit suit;
    public Card (Rank r, Suit s) {rank = r; suit = s;} //public constructor
    @Override
    public String toString() {
        return rank.toString() + " " + suit.toString();
    }
}

ArrayList<Card> deck = new ArrayList<>();
for (Suit s : Suit.values()) {
    for (Rank r : Rank.values()) {
        deck.add(new Card(r, s));
    }
}
System.out.println(deck.toString());
enum套装{心形、钻石、黑桃、梅花}
Enm秩{2,三,四,五,六,七,八,九,十,杰克,皇后,国王,ACE }
公务舱卡{
等级;
西服;
公共卡(等级r,诉讼s){Rank=r;诉讼=s;}//公共构造函数
@凌驾
公共字符串toString(){
返回rank.toString()+“”+suit.toString();
}
}
ArrayList deck=新的ArrayList();
对于(Suit s:Suit.values()){
for(秩r:Rank.values()){
甲板。添加(新卡(r,s));
}
}
System.out.println(deck.toString());


最好的称呼是一张有两名成员的班级“卡片”:脸和脸suit@progressive_overload是的,但我如何生成52个卡片对象的集合,覆盖所有可能的排列?两个循环:外部一个用于西装,内部一个用于脸。。给你52个卡片对象。请根据顺序将它们列在一个列表或集合中。如果您对如何提高我的问题的质量有意见,我们将不胜感激。我知道如何做到这一点,我在问实践中哪种方法是最好的。我想你会发现很多人有不同的解决方案。。。每个都声称拥有最好的:D…是的,但我如何生成一个包含52个卡片对象的集合,涵盖所有可能的排列?@GFauxPas那样?这是无效的,它甚至没有编译。是的,是的,它有。。。你甚至复制了整个代码,并将其作为自己的答案发布@xenterosThats这么多嵌套循环。这是我所得到的最奇怪的否决票:-)嵌套循环的数量是问题固有的。没有否决。。。但为什么是4圈?2就足够了,我不认为这个问题是关于成对的卡片;似乎所指的“对”就是西装、面值元组。所以问题只是问如何在一副牌中收集52张牌。@Michelle啊,然后我完全误解了这个问题。这就解释了为什么我需要比其他解决方案更多的循环。我不是以英语为母语的人,但我认为这个问题仍然很模糊。我会将“套装,面值元组”称为“卡片”:-)而“有序对”在这种情况下没有意义,因为一对是元组,总是有序的,所以我认为它意味着一对,其中第一个元素是感谢,我刚刚为我的学生项目做了扑克:)但这只是一张卡片列表,问题是要两张卡片。
.values
是我所缺少的,谢谢@GFauxPas我添加了
toString()
方法和调试
println()
,这样你就可以漂亮地打印整个卡片组了。@Konrad不,我没有问清楚这个问题,我的意思是每张卡片都是一对,有52对可能。