Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.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_Iterator_Comparator_Cloneable - Fatal编程技术网

用Java实现一副卡片

用Java实现一副卡片,java,iterator,comparator,cloneable,Java,Iterator,Comparator,Cloneable,所以我有一个实验室(我们被允许在这方面寻求外界的帮助,所以在这里我是在挠头之后)在那里我们必须实现一副牌。我们必须使用enum类来创建num 西服: public enum Suits { CLUBS, HEARTS, DIAMONDS, SPADES } 对于数字: public enum Numerals { DEUCE(2), THREE(3), FOUR(4), FIVE(5), SIX(6), SEVEN(7), EIGHT(8), NINE(9), TEN(10), JACK(1

所以我有一个实验室(我们被允许在这方面寻求外界的帮助,所以在这里我是在挠头之后)在那里我们必须实现一副牌。我们必须使用enum类来创建num

西服:

public enum Suits {
CLUBS, HEARTS, DIAMONDS, SPADES
}

对于数字:

public enum Numerals {
DEUCE(2), THREE(3), FOUR(4), FIVE(5), SIX(6), SEVEN(7), EIGHT(8), NINE(9), 
TEN(10), JACK(11), QUEEN(12), KING(13), ACE(14);
}

我的card类非常简单,但我不确定这两段代码:

    public int compareTo (Card aCard){
    if (aCard.aNumeral.equals(this.aNumeral) && aCard.aSuit.equals(this.aSuit)){
        return 0;
    }
    else {
        return -1;
    }
}

现在是棘手的部分…甲板

因此,我们必须使用Cloneable、Iterable和Comparator来实现这个平台,所以这里是我到目前为止所拥有的,只是不知道要做什么

import java.util.ArrayList;
import java.util.Comparator;
import java.util.Iterator;

public class Deck implements Cloneable, Iterable<Card>, Comparator<Card> {

private ArrayList<Card> cards;

public Deck (){
    for (Card c : cards){


    }

}
import java.util.ArrayList;
导入java.util.Comparator;
导入java.util.Iterator;
公共类甲板实现了可克隆、可移植、可比较的{
私人ArrayList卡;
公共甲板(){
用于(卡c:卡){
}
}

我甚至在努力拼凑构造器。我计划使用ArrayList基本上“保存”52张已排序的卡片(如您所见);但我们最终必须返回一张已排序的卡片组。关于去哪里有什么建议吗?

如果您使用像eclipse这样的ide,它将告诉您需要为接口实现什么方法:

import java.util.*;
class Card {}
class Deck implements Cloneable,Iterable<Card>,Comparator<Card> {
    public Deck() {}
    @Override public int compare(Card arg0,Card arg1) {
        // TODO Auto-generated method stub
        return 0;
    }
    @Override public Iterator<Card> iterator() {
        // TODO Auto-generated method stub
        return null;
    }
    private ArrayList<Card> cards;
}
import java.util.*;
类卡{}
类Deck实现了可克隆、可移植、比较器{
公共甲板(){}
@覆盖公共整数比较(卡arg0、卡arg1){
//TODO自动生成的方法存根
返回0;
}
@重写公共迭代器迭代器(){
//TODO自动生成的方法存根
返回null;
}
私人ArrayList卡;
}

迭代器很简单,因为数组列表有一个迭代器。查找可比较的示例。您必须以某种方式初始化该组。我在我的card类中放置了一个包含所有卡的静态最终数组。您可以使用数组作为列表从该数组中添加所有卡。

如果您使用像eclipse这样的ide,它将告诉您需要使用哪些方法进行im接口的补充:

import java.util.*;
class Card {}
class Deck implements Cloneable,Iterable<Card>,Comparator<Card> {
    public Deck() {}
    @Override public int compare(Card arg0,Card arg1) {
        // TODO Auto-generated method stub
        return 0;
    }
    @Override public Iterator<Card> iterator() {
        // TODO Auto-generated method stub
        return null;
    }
    private ArrayList<Card> cards;
}
import java.util.*;
类卡{}
类Deck实现了可克隆、可移植、比较器{
公共甲板(){}
@覆盖公共整数比较(卡arg0、卡arg1){
//TODO自动生成的方法存根
返回0;
}
@重写公共迭代器迭代器(){
//TODO自动生成的方法存根
返回null;
}
私人ArrayList卡;
}

迭代器很简单,因为数组列表有一个迭代器。查找可比较的示例。您必须以某种方式初始化该组。我在我的card类中放置了一个包含所有卡的静态最终数组。您可以使用数组作为列表从该数组中添加所有卡。

如果您使用像eclipse这样的ide,它将告诉您需要使用哪些方法进行im接口的补充:

import java.util.*;
class Card {}
class Deck implements Cloneable,Iterable<Card>,Comparator<Card> {
    public Deck() {}
    @Override public int compare(Card arg0,Card arg1) {
        // TODO Auto-generated method stub
        return 0;
    }
    @Override public Iterator<Card> iterator() {
        // TODO Auto-generated method stub
        return null;
    }
    private ArrayList<Card> cards;
}
import java.util.*;
类卡{}
类Deck实现了可克隆、可移植、比较器{
公共甲板(){}
@覆盖公共整数比较(卡arg0、卡arg1){
//TODO自动生成的方法存根
返回0;
}
@重写公共迭代器迭代器(){
//TODO自动生成的方法存根
返回null;
}
私人ArrayList卡;
}

迭代器很简单,因为数组列表有一个迭代器。查找可比较的示例。您必须以某种方式初始化该组。我在我的card类中放置了一个包含所有卡的静态最终数组。您可以使用数组作为列表从该数组中添加所有卡。

如果您使用像eclipse这样的ide,它将告诉您需要使用哪些方法进行im接口的补充:

import java.util.*;
class Card {}
class Deck implements Cloneable,Iterable<Card>,Comparator<Card> {
    public Deck() {}
    @Override public int compare(Card arg0,Card arg1) {
        // TODO Auto-generated method stub
        return 0;
    }
    @Override public Iterator<Card> iterator() {
        // TODO Auto-generated method stub
        return null;
    }
    private ArrayList<Card> cards;
}
import java.util.*;
类卡{}
类Deck实现了可克隆、可移植、比较器{
公共甲板(){}
@覆盖公共整数比较(卡arg0、卡arg1){
//TODO自动生成的方法存根
返回0;
}
@重写公共迭代器迭代器(){
//TODO自动生成的方法存根
返回null;
}
私人ArrayList卡;
}

迭代器很简单,因为数组列表有一个迭代器。查找可比较的示例。您必须以某种方式初始化组。我在我的card类中放置了一个包含所有卡的静态最终数组。您可以使用数组作为列表从该数组中添加所有卡。

要回答有关
比较的问题,请回答
a.compareTo(b)如果
a
小于
b
,则
应返回负值;如果
a
大于
b
,则返回正值;如果它们相等,则返回0。此外,如果对对象进行排序,排序应遵循的规则之一是,如果
a.compareTo(b)<0
,则
b.compareTo(a)>0
。(您不能同时拥有“
a
小于
b
”和“
b
小于
a
”)。您的
比较器在卡不相等时只返回
-1
,但它不遵循此规则。要解决此问题,您需要决定顺序。“排序的牌组”是什么看起来像?可能所有的俱乐部都在一起,然后是所有的钻石,等等,这意味着任何俱乐部卡都比任何钻石卡都要少。要正确地做到这一点,您需要首先比较西装,并且只有在西装相等时才比较等级:

public int compareTo (Card aCard){
    int suitCompare = this.aSuit.compareTo(aCard.aSuit);
    if (suitCompare != 0)  {
        return suitCompare;
    }
    return this.aNumeral.compareTo(aCard.aNumeral);
}

每个
enum
上的
compareTo
将返回
0
。因此,您可以比较套装,返回
0
的值,然后比较套装相等时的等级。这是编写任何
compareTo
方法的一般方法,其中需要检查多个数据段。

回答关于
compareTo
的问题:
a.compareTo(b)
如果
a
小于
b
,则返回负值;如果
a
大于
b
,则返回正值;如果它们相等,则返回0。此外,如果对对象进行排序,则排序应遵循的规则之一是if
a.compareTo(b)<0
,然后
b。与(a)>0
(你不能同时拥有“
a
小于
b
”和“
b
小于
a
public int compareTo(Card o) {
    if(this.suit.ordinal() == o.suit.ordinal()){
        return this.numeral.ordinal() - o.numeral.ordinal();
    }
    return this.suit.ordinal() - o.suit.ordinal();
}