当前位置: 首页 > 知识库问答 >
问题:

我如何在第三个数组中复制这三张牌

荆运诚
2023-03-14

我在扑克游戏的练习中绊倒了,我不知道怎么做:

我已经创建了一个包含7张卡的对象初始化数组。每张牌都由它的价值(7, 8, 9, 10,杰克...)和它的花色(俱乐部,钻石...)来指定。

我创建了第二个数组,计算相同值的卡片数量。例如,如果我有3张价值7的牌,那么在我的第二张表中,价值3的整数将适合价值7的牌。

我的问题是:在第三个数组中,Card[]cards=新卡[5],我如何将这3张值为7的卡复制到这张卡的开头?我不是在寻找解决方案,只是一个如何做到这一点的简单想法。

我创建了以下第一个数组:

Card[]VII encards=new Card[7];

我创建了以下方法来计算相同值的卡片数量如下:

private int[] nbCardsvalue(Card[] sevencards){
        int[] nbvalue = new int[13];
        for (int i = 0; i < sevencards).length; i++){
            if (sevencards[i].getValue() == 2){
                nbvalue [0]++;
            }else if (sevencards[i].getValue() == 3){
                nbvalue [1]++;
            }else if (sevencards[i].getValue() == 4){
                nbvalue [2]++;
            }else if (sevencards[i].getValue() == 5){
                nbvalue [3]++;
            }else if (sevencards[i].getValue() == 6){
                nbvalue [4]++;
            }else if (sevencards[i].getValue() == 7){
                nbvalue [5]++;
            }else if (sevencards[i].getValue() == 8){
                nbvalue [6]++;
            }else if (sevencards[i].getValue() == 9){
                nbvalue [7]++;
            }else if (sevencards[i].getValue() == 10){
                nbvalue [8]++;
            }else if (sevencards[i].getValue() == 11){
                nbvalue [9]++;  
            }else if (sevencards[i].getValue() == 12){
                nbvalue [10]++; 
            }else if (sevencards[i].getValue() == 13){
                nbvalue [11]++;
            }else if (sevencards[i].getValue() == 14){
                nbvalue [12]++;
            }else{
                return nbvalue ;
            }
        }
        return nbvalue ;
    }

澄清:

  • 我的第一个阵列包含7张扑克牌,
  • 我的第二个数组计算相同值的卡数,
  • 第三个数组大小为5,包含我的第一个数组中的五张最好的牌或最好的组合,以便能够比较扑克游戏玩家的手的力量

例如:如果在我的第一个数组中有七张卡片[],我有三张值为7的卡片(即一种三张)。在我的第二个数组nbvalue[]中,我的nbvalue[5]=3,这表示我有3张值为7的卡。

但是我需要一个第三个数组(例如。Main[]),我将把我的组合,即三个同类。我的三个7在这个数组的开始。问题是,我不知道如何得到这3张价值7的卡片,并把它们放在我的主[]数组中。

这是我的班级卡:

public class Card implements Comparable<Card>{
    private final Suit suit
    public final int Jack = 11;
    public final int Queen = 12;
    public final int King = 13;
    public final int Ace = 14;
    private final int value;

    public Card (Suit s, int v){
        this.suit = s;
        this.value = v;
    }
    public Couleur getSuit(){
        return suit
    }
    public int getValue(){
        return value;
    }
    public String toString(){
        String v = String.valueOf(value);
        String s = suit.toString();
        if (value >= 2 && value <= 10){
            return v + " de " + s;        
        }else if (value == 11){
            return "Jack of " + s;
        }else if (value == 12){
            return "Queen of " + s;
        }else if (value == 13){
            return "King of " + s;  
        }else if (value == 14){
            return "Ace of " + s;
        }
        return null;
    }
    public int compareTo(Card c2){
        if (this.value > c2.value){
            return 1;
        }else if (this.value < c2.value){
            return -1;
        }else {
            return 0;
        }
    }
}

提前感谢您的帮助,祝您新年快乐;-)

共有1个答案

阎乐池
2023-03-14

你问“我如何将这三张价值7的牌复制到[第三个数组的开头”,但你没有详细说明“复制”在你的逻辑中意味着什么。更具体地说,在你的代码中(在你描述的状态下),你有一个卡的实例(我假设),当调用getValue()时,它返回值7,而你在另一个实例中有一个值3的整数数组在特定的位置(索引5),这似乎意味着该类型的卡的数量。

因此,在您的代码中复制一张卡的单个引用三(3)次,可能意味着只需创建卡类的3个新实例(通过调用卡构造函数,即新卡(/*parameters*/),使用特定参数,以便创建的实例将表示值为7的卡,也就是说,对getValue()调用将为所有3个新创建的Card实例返回7。如果你用你的卡片类的代码更新你的帖子,我可以更详细地解释一下。现在我不知道你有什么可用的构造函数,但是如果需要的话,你可以添加更多的构造函数——你可以添加一个特定的构造函数,有时称为“复制构造函数”,这将创建一个相同类型的卡片的新实例)。

当您创建3个Card实例中的每一个时,将它们分配给所需索引的数组Card

由于要创建(复制)并放入数组的卡的数量可能是动态的(有时可能少于或多于3张),因此您可以使用循环来完成这一部分,并在循环中不断创建新的卡实例,并将其分配给数组中的某个索引。索引变量也将是循环变量,从0开始,直到(不包括)必须添加到数组开头的卡的数量。

但是,根据您的用例,您可能不必复制卡片并制作它的多个实例,您也可以将您已经拥有的卡片实例(值7)的相同引用分配到卡片数组,无需制作副本。这可能在逻辑上实现类似的结果(同样,免责声明,取决于您的用例)。

 类似资料: