繁体   English   中英

如何将这 3 张卡片复制到第三个数组中

[英]How do I copy those 3 cards in a third array

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

我创建了一个包含 7 张卡片的初始对象数组。 每张牌都由其价值(7、8、9、10、杰克...)和花色(梅花、菱形...)指定。

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

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

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

Card[] sevencards = 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,包含我第一个数组中最好的五张牌,或者是能够比较扑克游戏玩家手牌强度的最佳组合。

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

但我需要第三个数组(例如 Main[]),我将在其中放置我的组合,即三种。 我的三个 7 在这个数组的开头。 问题是我不知道如何获得这 3 张价值为 7 的卡片并将它们放入我的 Main[] 数组中。

这是我的 class 卡:

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;
        }
    }
}

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

您问“我如何将这 3 张价值 7 的卡片复制到 [第三个数组] 的开头”,但您没有详细说明“复制”在您的逻辑方面的含义。 更具体地说,在您的代码中(在您描述的 state 中)您有一个 Card 实例(我假设),它在调用getValue()时返回值 7,并且您有一个值 3 的 integer另一个数组在特定的 position (在索引 5 处),这似乎意味着该类型卡的数量。

因此,在您的代码中复制 Card 的单个引用三 (3) 次,可能意味着只创建 Card class 的 3 个新实例(通过调用 Card 构造函数,即new Card(/* parameters */) ,具有特定的参数,以便创建的实例将代表值为 7 的卡片,即调用getValue()将为所有 3 个新创建的Card实例返回 7。如果您使用卡片 class 的代码更新您的帖子,我可以详细说明更多。现在我不知道你有哪些可用的构造函数,但如果需要,你可以随时添加更多 - 你可以添加一个特定的构造函数,有时称为“复制构造函数”,它会创建一个卡片的新实例同类)。

当您制作 3 个 Card 实例中的每一个时,将它们分配给所需索引处的阵列cards

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

但是,根据您的用例,您可能不必复制卡片并制作多个实例,您也可以只分配您已经拥有的卡片实例的相同引用(值 7 之一) , 到cards数组中的多个位置,而不进行“复制”。 这可以在逻辑上实现类似的结果(同样,免责声明,取决于您的用例)。

编辑:提供了卡 class 的代码。 制作同种卡片的新实例(副本),会像这样 go

// The card reference I want to copy
Card someCard;
// This reference could be obtained in various ways, but one way would be from the sevencards array like this
someCard = sevencards[i];

// then we make 3 copies (we get 3 new references)
Card cardCopy1 = new Card(someCard.getSuit(), someCard.getValue());
Card cardCopy2 = new Card(someCard.getSuit(), someCard.getValue());
Card cardCopy3 = new Card(someCard.getSuit(), someCard.getValue());

// we assign the references to the other main/cards array, starting at the beginning, so at indices 0, 1 and 2
cards[0] = cardCopy1;
cards[1] = cardCopy2;
cards[2] = cardCopy3;

当然,这个示例代码总是制作 3 个副本,要制作任意数量的副本,必须将上面的代码更改为一个循环(一个 for 循环或一个 while 循环,取决于您的喜好)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM