使用JAVA编写以下程序: 
1、请定义一个名为Card的扑克牌类,该类有两个private访问权限的字符串变量face和suit;分别描述一张牌的牌面值(如:A、K、Q、J、10、9、……3、2等)和花色(如:“黑桃”、“红桃”、“梅花”、“方块”);定义Card类中的public访问权限的构造方法,为类中的变量赋值;定义protected访问权限的方法getFace(),得到扑克牌的牌面值;定义protected访问权限的方法getSuit(),得到扑克牌的花色;定义方法toString(),返回表示扑克牌的花色和牌面值字符串(如“红桃A”、“梅花10”等)。 2、若应用程序的main方法中,定义字符串数组f和s;分别表示扑克牌的牌面值和花色;定义52个元素的Card类型数组deck,用来存放4个花色的52张牌。如下所示。 
String f[] = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"}; 
String s[] = {"黑桃","红桃","梅花","方块"}; 
Card deck = new Card[52]; 
(1)使用Card类的构造方法给deck数组的52张牌赋值,要求数组中先存放黑桃花色的A、2、3、……、K;然后是红桃花色的A、2、3、……、K;梅花花色的A、2、3、……、K;方块花色的A、2、3、……、K。请写出实现上述功能的程序段。 
(2)请编写模拟洗牌的完整程序,即把数组deck中的扑克牌随机打乱存放顺序。原题如下: 引用内容
    private String face; // A, K, Q, J, 10, ... 2
    private String suit; // Spade, Heart, Club, Diamond
    public Card(String suit, String face) {
        this.face = face;
        this.suit = suit;
    }    protected String getFace() {
        return face;
    }    protected String getSuit() {
        return suit;
    }    public String toString() {
        return suit + " " + face;
    }
解题,完成程序解: 程序代码
package poker;public class Card {    private String face; // A, K, Q, J, 10, ... 2
    private String suit; // Spade, Heart, Club, Diamond
    public Card(String suit, String face) {
        this.face = face;
        this.suit = suit;
    }    protected String getFace() {
        return face;
    }    protected String getSuit() {
        return suit;
    }    public String toString() {
        return suit + " " + face;
    }    public static void shuffle(Card[] deck, int startIndex, int size,
                               int splitIndex) { //shuffle洗牌
        System.out.println("startIndex:" + startIndex);
        if (splitIndex * 2 > size) { //if rand is 30
            Card.swap(deck, startIndex, splitIndex, size - splitIndex); //[52]、0、30、22
            shuffle(deck, size - splitIndex, splitIndex, size - splitIndex); //[52]、22、30、22
        } else if (splitIndex * 2 < size) { //if rnd is 10
            Card.swap(deck, startIndex, size - splitIndex, splitIndex); //[52]、0、42、10
            shuffle(deck, startIndex, size - splitIndex, splitIndex); //[52]、0、42、10
        } else {
            Card.swap(deck, startIndex, splitIndex, splitIndex);
        }    }    public static void swap(Card[] deck, int srcIndex, int dstIndex, int size) { //交换
        //SRC是在本位置显示:source的缩写,源的意思 HREF是点击后连接的目标:HyperlinkReference,超链接引用
        String face = "";
        String suit = "";
        for (int i = 0; i < size; i++) {
            face = deck[srcIndex + i].face;
            suit = deck[srcIndex + i].suit;
            deck[srcIndex + i].face = deck[dstIndex + i].face;
            deck[srcIndex + i].suit = deck[dstIndex + i].suit;
            deck[dstIndex + i].face = face;
            deck[dstIndex + i].suit = suit;
        }
    }    /**
     * @param args
     */
    public static void main(String[] args) {
        //第一问解答
        Card[] deck = new Card[52];
        String f[] = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J",
                     "Q", "K"};
        String s[] = {"Spade", "Heart", "Club", "Diamond"};
        for (int i = 0; i < s.length; i++) {
            for (int j = 0; j < f.length; j++) {
                deck[i * 13 + j] = new Card(s[i], f[j]); //依次存入数组之中,每13张一回合
            }
        }
        //第二问解答
        int rnd = 0;
        int numOfShuffle = 10;
        for (int i = 0; i < numOfShuffle; i++) {
            rnd = (int) Math.abs(Math.random() * 52); //Math.random()返回大于或等于 0.0 但小于 1.0 的伪随机 double 值。            Card.shuffle(deck, 0, deck.length, rnd);
        }
// Test
        /*
         for (int i=0; i<deck.length; i++)
         {
         System.out.println(deck[i]);
         } */
    }} 

解决方案 »

  1.   

    想问问
    public String toString() {
      return suit + " " + face;
      }
       是什么意思 不写可以么 谢谢谢了
      

  2.   

        一般toString() 方法 是把某个对象转化为字符串
        而在这的话,他返回的是以空格分隔的字符串,可以理解为toString()方法重写
        个人理解、、、
      

  3.   

    哇好复杂的程式,我不知道我写的符合龟腚不?
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Random;public class aaa {
    static List<String> parkList = new ArrayList<String>();
    static List<String> zslist = new ArrayList<String>();
    static List<String> lslist = new ArrayList<String>();
    static List<String> wwlist = new ArrayList<String>();
    static List<String> zllist = new ArrayList<String>(); public static void main(String[] args) {
    // 初始化牌
    for (int i = 1; i < 5; i++) {
    switch (i) {
    case 1:
    initP("红桃");
    break;
    case 2:
    initP("梅花");
    break;
    case 3:
    initP("方片");
    break;
    case 4:
    initP("黑桃");
    break;
    }
    }
    // 开始分牌
    fenpai();
    for (int i = 0; i < 4; i++) {
    switch (i) {
    case 0:
    System.out.println("张三的牌为:=\r\n");
    printlist(zslist);
    break;
    case 1:
    System.out.println("李四的牌为:=\r\n");
    printlist(lslist);
    break;
    case 2:
    System.out.println("王五的牌为:=\r\n");
    printlist(wwlist);
    break;
    case 3:
    System.out.println("赵六的牌为:=\r\n");
    printlist(zllist);
    break;
    }
    }
    } private static void printlist(List<String> list) {
    for (int i = 0; i < list.size(); i++) {
    System.out.println(list.get(i));
    }
    } private static void initP(String str) {
    String temstr = str;
    for (int i = 1; i < 14; i++) {
    temstr = str;
    switch (i) {
    case 1:
    temstr = temstr + "A";
    break;
    case 11:
    temstr = temstr + "J";
    break;
    case 12:
    temstr = temstr + "Q";
    break;
    case 13:
    temstr = temstr + "K";
    break;
    default:
    temstr = temstr + i;
    }
    parkList.add(temstr);
    }
    } private static void fenpai() {
    Random random = new Random();
    int k = 0;
    for (int i = 0; i < parkList.size(); i++) {
    switch (k) {
    case 0:
    zslist.add(parkList.get(random.nextInt(parkList.size())));
    break;
    case 1:
    lslist.add(parkList.get(random.nextInt(parkList.size())));
    break;
    case 2:
    wwlist.add(parkList.get(random.nextInt(parkList.size())));
    break;
    case 3:
    zllist.add(parkList.get(random.nextInt(parkList.size())));
    break;
    }
    if (k == 3) {
    k = 0;
    }
    else
    {
    k++;
    }
    }
    }
    }
      

  4.   

    toString()方法是Object类的方法,所以其他子类(所有其他类都继承Object类,所以即使你没有显式地写上toString()方法,你的aaa类也有toString()方法)都有这个方法,如果你没有显式是写toString()方法,那它就默认地执行继承而来的行为,也就是打印出对象的地址,而这里,你的题目要求toString()方法是返回表示扑克牌的花色和牌面值字符串(如“红桃A”、“梅花10”等),所以你要重写toString()方法.
      

  5.   

    不写可以,你用 system.out.println(card)就会看到类似 Card@1291723 之类的信息。
    写这个就好看些,知道具体是哪个牌。我看这个打印只是在被注释掉的test里有用,所以应该不写也不影响解题
      

  6.   

    suit表示牌的花色,face表示牌的内容
      

  7.   

    你的洗牌的原理是什么?只是为了随机取值么?没有其他的规则?如果这样的话直接把deck 放到List里面.然后随机取出一个remove一个.循环完了就OK了.
      

  8.   


    /**   1
     */
    class Card {    /**一张牌的牌面值(如:A、K、Q、J、10、9、……3、2等*/
        private String face;
        /**花色(如:“黑桃”、“红桃”、“梅花”、“方块”);*/
        private String suit;    public Card(String face, String suit) {
            this.face = face;
            this.suit = suit;
        }    /**
         * 扑克牌的牌面值
         * @return
         */
        protected String getFace() {
            return face;
        }    /**
         * 得到扑克牌的花色
         * @return
         */
        protected String getSuit() {
            return suit;
        }    @Override
        public String toString() {
            return (suit != null ? suit : "") + (face != null ? face : "");
        }
    }/**
     *
     * @author Tsubasa
     */
    public class NewClass {    public static void main(String[] args) {
            String f[] = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
            String s[] = {"黑桃", "红桃", "梅花", "方块"};
            Card[] deck = new Card[52];        /// 2.1
            for (int i = 0; i < s.length; i++) {
                for (int j = 0; j < f.length; j++) {
                    deck[i * f.length + j] = new Card(f[j], s[i]);
                }
            }        //////      2.2
            //  从最后一个位置开始,随机和前面的牌换位置,换完51次即洗完牌
            java.util.Random rd = new java.util.Random(System.currentTimeMillis());
            for (int t, i = deck.length - 1; i > 0; i--) {
                t =rd.nextInt(i);
                Card c = deck[t];
                deck[t] = deck[i];
                deck[i] = c;
            }
        }
    }
      

  9.   

    public class Card {

    private String color;
    private String code;
    private int point;

    public void show(){
    System.out.println(color + code + " -> " + point + "点");
    }

    public String getColor() {
    return color;
    }
    public void setColor(String color) {
    this.color = color;
    }
    public String getCode() {
    return code;
    }
    public void setCode(String code) {
    this.code = code;
    }
    public int getPoint() {
    return point;
    }
    public void setPoint(int point) {
    this.point = point;
    }

    public static void main(String[] args){
    Card card = new Card();
    card.setColor("梅花");
    card.setCode("5");
    card.setPoint(5);

    card.show();
    }
    }
      

  10.   

    import java.util.Random;
    public class Poker {

    private Card[] cards;
    private Random random;

    public Poker(){
    cards = new Card[52];

    String[] codes = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
    String[] colors = {"黑桃","红桃","梅花","方块"};
    int[] points = {1,2,3,4,5,6,7,8,9,10,10,10,10};

    for(int i=0; i<codes.length; i++){
    for(int j=0; j<colors.length; j++){
    Card card = new Card();
    card.setCode(codes[i]);
    card.setColor(colors[j]);
    card.setPoint(points[i]);
    cards[j + 13*i] = card;
    }
    }

    random = new Random();

    }

    public void show(){
    for(Card card : cards){
    card.show();
    }
    }

    public void wash(){
    for(int i=0; i<cards.length; i++){
    int randomInt = random.nextInt(52);
    if(i!=randomInt){
    Card temp = cards[i];
    cards[i] = cards[randomInt];
    cards[randomInt] = temp;
    }
    }
    }

    public Card[] getCards(){
    return this.cards;
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Poker poker = new Poker();

    //poker.wash();
    poker.show();
    }
    }