Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.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_Arrays_Object_Shuffle - Fatal编程技术网

在java中对对象数组进行洗牌无法正常工作

在java中对对象数组进行洗牌无法正常工作,java,arrays,object,shuffle,Java,Arrays,Object,Shuffle,我已经创建了一系列我想要洗牌的牌对象。但是,当我使用一个简单的洗牌方法时,输出是不正确的。它不是洗牌,而是复制一些牌并删除其他牌。下面是一个打印内容的示例 Jack of Clubs 5 of Hearts 4 of Hearts 7 of Hearts 5 of Hearts Ace of Spades 8 of Clubs 5 of Hearts Jack of Diamonds Jack of Clubs Queen of Diamonds Jack of Diamonds 9 of Di

我已经创建了一系列我想要洗牌的牌对象。但是,当我使用一个简单的洗牌方法时,输出是不正确的。它不是洗牌,而是复制一些牌并删除其他牌。下面是一个打印内容的示例

Jack of Clubs
5 of Hearts
4 of Hearts
7 of Hearts
5 of Hearts
Ace of Spades
8 of Clubs
5 of Hearts
Jack of Diamonds
Jack of Clubs
Queen of Diamonds
Jack of Diamonds
9 of Diamonds
4 of Hearts
Jack of Diamonds
3 of Diamonds
6 of Diamonds
Jack of Clubs
4 of Hearts
10 of Diamonds
Jack of Diamonds
2 of Diamonds
Queen of Diamonds
7 of Hearts
5 of Hearts
King of Diamonds
5 of Hearts
9 of Diamonds
Ace of Spades
4 of Diamonds
King of Diamonds
10 of Hearts
9 of Diamonds
2 of Diamonds
10 of Diamonds
5 of Hearts
10 of Diamonds
Queen of Diamonds
Queen of Diamonds
Queen of Diamonds
4 of Diamonds
2 of Diamonds
9 of Diamonds
Queen of Diamonds
10 of Diamonds
7 of Hearts
5 of Hearts
8 of Clubs
4 of Hearts
5 of Hearts
5 of Hearts
5 of Hearts
如你所见,钻石太多,几乎没有梅花或黑桃。我还注意到只有西装弄乱了。每个数字都有四个和四个杰克、皇后、国王和王牌。谢谢你的帮助

以下是卡类的代码:

public class Card {
//variables for attributes
private String name;
private String suit;
private int value;

//constructors
public Card(){
}
public Card(String name, String suit, int value){
    this.setSuit(suit);
    this.setValue(value);
    this.setName(name);
}

//getter and setter methods
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getSuit() {
    return suit;
}
public void setSuit(String suit) {
    this.suit = suit;
}
public int getValue() {
    return value;
}
public void setValue(int value) {
    this.value = value;
}
}
下面是甲板级别的代码:

public class Deck {
//array of cards
private Card[] cardArray = new Card[52];

//constructor
public Deck(){
}

//methods to create cards of different suits
public void createClubs(){
    for(int i = 0; i < 9; i++){
        cardArray[i]=new Card(Integer.toString(i+2),"Clubs",i+2);
    }
    cardArray[9]=new Card("Jack","Clubs",10);
    cardArray[10]=new Card("Queen","Clubs",10);
    cardArray[11]=new Card("King","Clubs",10);
    cardArray[12]=new Card("Ace","Clubs",1);
}
public void createDiamonds(){
    int j = 2;
    for(int i = 13; i < 22; i++){
        cardArray[i]=new Card(Integer.toString(j),"Diamonds",j);
        j++;
    }
    cardArray[22]=new Card("Jack","Diamonds",10);
    cardArray[23]=new Card("Queen","Diamonds",10);
    cardArray[24]=new Card("King","Diamonds",10);
    cardArray[25]=new Card("Ace","Diamonds",1);
}
public void createHearts(){
    int k = 2;
    for(int i = 26; i < 35; i++){
        cardArray[i]=new Card(Integer.toString(k),"Hearts",k);
        k++;
    }
    cardArray[35]=new Card("Jack","Diamonds",10);
    cardArray[36]=new Card("Queen","Diamonds",10);
    cardArray[37]=new Card("King","Diamonds",10);
    cardArray[38]=new Card("Ace","Hearts",1);
}
public void createSpades(){
    int l = 2;
    for(int i = 39; i < 48; i++){
        cardArray[i]=new Card(Integer.toString(l),"Diamonds",l);
        l++;
    }
    cardArray[48]=new Card("Jack","Diamonds",10);
    cardArray[49]=new Card("Queen","Diamonds",10);
    cardArray[50]=new Card("King","Diamonds",10);
    cardArray[51]=new Card("Ace","Spades",1);
}

//method to get and display attributes of the array
public void displayArray(){
    for(int i = 0; i<cardArray.length;i++){
        System.out.println(cardArray[i].getName() + " of " + cardArray[i].getSuit());
    }
}
public void displayCard(int i){
    System.out.println(cardArray[i].getName() + " of " + cardArray[i].getSuit());
}
public Card[] getArray(){
    return cardArray;
}

//shuffle method
public void shuffle(){
    for(int i = 0; i<cardArray.length; i++){
        int random = (int)(Math.random() * cardArray.length);

        Card temp = cardArray[random];
        cardArray[random] = cardArray[i];
        cardArray[i] = temp;
    }
}
}
公共类甲板{
//卡片阵列
私人卡[]cardArray=新卡[52];
//建造师
公共甲板(){
}
//创建不同套装卡的方法
公共俱乐部(){
对于(int i=0;i<9;i++){
cardArray[i]=新卡(整数。toString(i+2),“Clubs”,i+2);
}
cardArray[9]=新卡(“杰克”,“俱乐部”,10);
cardArray[10]=新卡(“女王”、“俱乐部”,10);
cardArray[11]=新卡(“国王”、“俱乐部”,10);
cardArray[12]=新卡(“Ace”,“Clubs”,1);
}
公共钻石(){
int j=2;
对于(int i=13;i<22;i++){
cardArray[i]=新卡(整数。toString(j),“钻石”,j);
j++;
}
cardArray[22]=新卡(“杰克”、“钻石”,10);
cardArray[23]=新卡(“女王”、“钻石”,10);
cardArray[24]=新卡(“国王”、“钻石”,10);
cardArray[25]=新卡(“Ace”、“钻石”,1);
}
公众心{
int k=2;
对于(int i=26;i<35;i++){
cardArray[i]=新卡(整数。toString(k),“Hearts”,k);
k++;
}
cardArray[35]=新卡(“杰克”、“钻石”,10);
cardArray[36]=新卡(“女王”、“钻石”,10);
cardArray[37]=新卡(“国王”、“钻石”,10);
cardArray[38]=新卡(“Ace”、“红心”,1);
}
公共空间createSpades(){
int l=2;
对于(int i=39;i<48;i++){
cardArray[i]=新卡(整数。toString(l),“钻石”,l);
l++;
}
cardArray[48]=新卡(“杰克”,“钻石”,10);
cardArray[49]=新卡(“女王”、“钻石”,10);
cardArray[50]=新卡(“国王”、“钻石”,10);
cardArray[51]=新卡(“A”,“黑桃”,1);
}
//方法来获取和显示数组的属性
公共void displayArray(){

对于(inti=0;i这与
shuffle
方法无关

public void createSpades(){
    int l = 2;
    for(int i = 39; i < 48; i++){
        cardArray[i]=new Card(Integer.toString(l),"Diamonds",l);
        l++;
    }
    cardArray[48]=new Card("Jack","Diamonds",10);
    cardArray[49]=new Card("Queen","Diamonds",10);
    cardArray[50]=new Card("King","Diamonds",10);
    cardArray[51]=new Card("Ace","Spades",1);
}
现在,只需为每个诉讼调用,传递适当的名称和偏移量:如果对一个诉讼有效,则对所有诉讼有效

createSuit(0, "Clubs");
createSuit(13, "Diamonds");
createSuit(26, "Hearts");
createSuit(39, "Spades");

shuffle
方法而言,该方法未正确实现以产生公平的分配。更简单的方法是使用
集合。shuffle

Collections.shuffle(Arrays.asList(cardArray));

仔细阅读你的
createHearts
createSpades
方法。你洗牌的方法看起来不公平。作为对你的
卡类的一般评论,在构建后不需要设置名称、套装或值。移除设置器,并将字段设置为最终值。(1+)另一种简化方法。只需使用ArrayList,您甚至不需要担心偏移量。
Collections.shuffle(Arrays.asList(cardArray));