如何在Java中洗牌?

如何在Java中洗牌?,java,arrays,Java,Arrays,我一直试图洗牌的甲板,但有错误的输出。我想让它显示一张随机牌,如王牌黑桃、二心三王等。然而,结果如下所示。如何更改代码 Card@b5f53a Card@1f6f0bf Card@137c60d Card@ab853b Card@b82368 Card@11c8a71 Card@c53dce Card@15cda3f Card@fc9944 Card@1b26af3 Card@8b819f Card@eb017e Card@aeffdf Card@120a47e Card@f73c1 Card@

我一直试图洗牌的甲板,但有错误的输出。我想让它显示一张随机牌,如王牌黑桃、二心三王等。然而,结果如下所示。如何更改代码

Card@b5f53a
Card@1f6f0bf
Card@137c60d
Card@ab853b
Card@b82368
Card@11c8a71
Card@c53dce
Card@15cda3f
Card@fc9944
Card@1b26af3
Card@8b819f
Card@eb017e
Card@aeffdf
Card@120a47e
Card@f73c1
Card@789144
Card@b5f53a
Card@1893efe
Card@186c6b2
Card@15ee671
Card@eb017e
Card@137c60d
Card@16b13c7
Card@11c8a71
Card@df8f5e
Card@13d93f4
Card@1bca5f1
Card@b82368
Card@329f3d
Card@1749757
守则:

import java.util.Random;

public class deck3 {

    //public int TOTALCARD;
    public Card[] deck;

    public deck3() {
        this.deck = new Card[52];
        String[] suit = {"Spades", "Hearts", "Diamonds", "Clubs"};// Array for
        // suit
        int[] number = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}; // Array

        for (int i = 0; i < suit.length; i++) {
            for (int n = 0; n < number.length; n++) {
                Card c = new Card(suit[i], number[n]); // Card instantiate

                // Using (i*number.length + n) will get you from index 0 to 51
                if (deck[(i * number.length + n)] == null) {
                    deck[(i * number.length + n)] = c; // Accessing index 0 to
                    // 51
                }
            }
        }
    }

    public void CreateDeck() {}

    //int[] TOTALCARD={deck};
    public void shuffleDeck() {

        Random generator = new Random();
        for (int i = 0; i < deck.length; i++) {
            int thisplace = generator.nextInt(50);
            int thatplace = generator.nextInt(50);

            Card savednumber = deck[thisplace];
            deck[thisplace] = deck[thatplace];
            deck[thatplace] = savednumber;
            System.out.println(savednumber);
        }

    }

    public void displayDeck() {
        for (int i = 0; i < deck.length; i++) {
            this.deck[i].display();
            //shuffleDeck();// Calling the display method from my card
            // class.
            //System.out.println(randomNumbers);
        }
    }
}
import java.util.Random;
公务舱3{
//公共积分卡;
公众卡[]牌组;
公众谘询委员会3(){
this.deck=新卡[52];
String[]suit={“黑桃”、“红心”、“钻石”、“梅花”};//的数组
//适合
int[]number={1,2,3,4,5,6,7,8,9,10,11,12,13};//数组
对于(int i=0;i
覆盖
类中的
toString
方法。
然后使用相同的代码打印出
对象。
应该这样做


覆盖
类中的
toString
方法。
然后使用相同的代码打印出
对象。
应该这样做


覆盖
类中的
toString
方法。
然后使用相同的代码打印出
对象。
应该这样做


覆盖
类中的
toString
方法。
然后使用相同的代码打印出
对象。
应该这样做


您需要重写类卡片中的public String toString()方法,以获得漂亮的打印效果(而不是Card@b5f53a, ...). 例如:

class Card {
    private String value;
    private Long value2;

    @Override
    public String toString() {
        return "Card{" +
                "value='" + value + '\'' +
                ", value2=" + value2 +
                '}';
        }
    }
如果您需要shuffle,它可以更好地使用Collections.shuffle()。 例如:

    Card[] cards = new Card[10];
    .... // you cards array (may be you can use List?)
    List<Card> cardList = new ArrayList<Card>();
    Collections.addAll(cardList, cards);
    Collections.shuffle(cardList);
    //transform to array (if you need array)
    cards = cardList.toArray(new Card[cardList.size()]);
Card[]cards=新卡[10];
.... // 您的卡片阵列(可能是您可以使用的列表?)
List cardList=new ArrayList();
集合。添加所有(卡片列表、卡片);
收藏。洗牌(卡片列表);
//转换为数组(如果需要数组)
cards=cardList.toArray(新卡[cardList.size());

正如您所看到的,您可以使用list而不是array

您需要在类Card中重写public String toString()方法,以获得漂亮的打印效果(而不是Card@b5f53a, ...). 例如:

class Card {
    private String value;
    private Long value2;

    @Override
    public String toString() {
        return "Card{" +
                "value='" + value + '\'' +
                ", value2=" + value2 +
                '}';
        }
    }
如果您需要shuffle,它可以更好地使用Collections.shuffle()。 例如:

    Card[] cards = new Card[10];
    .... // you cards array (may be you can use List?)
    List<Card> cardList = new ArrayList<Card>();
    Collections.addAll(cardList, cards);
    Collections.shuffle(cardList);
    //transform to array (if you need array)
    cards = cardList.toArray(new Card[cardList.size()]);
Card[]cards=新卡[10];
.... // 您的卡片阵列(可能是您可以使用的列表?)
List cardList=new ArrayList();
集合。添加所有(卡片列表、卡片);
收藏。洗牌(卡片列表);
//转换为数组(如果需要数组)
cards=cardList.toArray(新卡[cardList.size());

正如您所看到的,您可以使用list而不是array

您需要在类Card中重写public String toString()方法,以获得漂亮的打印效果(而不是Card@b5f53a, ...). 例如:

class Card {
    private String value;
    private Long value2;

    @Override
    public String toString() {
        return "Card{" +
                "value='" + value + '\'' +
                ", value2=" + value2 +
                '}';
        }
    }
如果您需要shuffle,它可以更好地使用Collections.shuffle()。 例如:

    Card[] cards = new Card[10];
    .... // you cards array (may be you can use List?)
    List<Card> cardList = new ArrayList<Card>();
    Collections.addAll(cardList, cards);
    Collections.shuffle(cardList);
    //transform to array (if you need array)
    cards = cardList.toArray(new Card[cardList.size()]);
Card[]cards=新卡[10];
.... // 您的卡片阵列(可能是您可以使用的列表?)
List cardList=new ArrayList();
集合。添加所有(卡片列表、卡片);
收藏。洗牌(卡片列表);
//转换为数组(如果需要数组)
cards=cardList.toArray(新卡[cardList.size());

正如您所看到的,您可以使用list而不是array

您需要在类Card中重写public String toString()方法,以获得漂亮的打印效果(而不是Card@b5f53a, ...). 例如:

class Card {
    private String value;
    private Long value2;

    @Override
    public String toString() {
        return "Card{" +
                "value='" + value + '\'' +
                ", value2=" + value2 +
                '}';
        }
    }
如果您需要shuffle,它可以更好地使用Collections.shuffle()。 例如:

    Card[] cards = new Card[10];
    .... // you cards array (may be you can use List?)
    List<Card> cardList = new ArrayList<Card>();
    Collections.addAll(cardList, cards);
    Collections.shuffle(cardList);
    //transform to array (if you need array)
    cards = cardList.toArray(new Card[cardList.size()]);
Card[]cards=新卡[10];
.... // 您的卡片阵列(可能是您可以使用的列表?)
List cardList=new ArrayList();
集合。添加所有(卡片列表、卡片);
收藏。洗牌(卡片列表);
//转换为数组(如果需要数组)
cards=cardList.toArray(新卡[cardList.size());

正如您所看到的,您可以使用列表而不是数组函数
deck.display()
中有一个错误,您打印的是卡的类id,而不是它们的数据字段。(我建议您制作类似于
System.out.print(card[I])
的东西,这是错误的,因为程序不知道要从类中打印什么值,所以它会打印类id)

您可能希望在
类中实现函数
display()
,如下所示:

public void display()
{
    System.out.println("Card Number = "+number+", Card Suit = "+suit);
}
然后,当您调用
deck.display()
时,您可以为所有卡调用
card[i].display()

也可以考虑使用卡>套装的<代码> INT/COD>值,这是比较轻量级的。

< P>你的函数中有一个错误:代码>甲板。显示()/>代码。你打印的是你的卡的类ID,而不是它们的数据字段。(我建议您制作类似于
System.out.print(card[I])
的东西,这是错误的,因为程序不知道要从类中打印什么值,所以它会打印类id)

您可能想要实现一个函数