Q1: 完成一个“卡牌操作”的类
hdu Java练习题
题目要求:
以面向对象方式写一个“卡牌操作”类:CardOperator
具有以下功能(类似扑克的功能,具体解释见后续ppt):
功能1:初始化卡牌,initialCards()
功能2:显示卡牌(每13张牌换行) ,showCards()
功能3:洗牌(将牌打乱),shuffleCards()
功能4:对所有牌理牌(重新排序,按A-2-3-…-K排序),rankCards()
功能5:发牌,将已经混排好的牌进行发牌,发指定数量的前N张牌, dealCards()
功能6:展示所发的牌,将已经发好牌依次显示出来(每13张牌换行), showDealCards()
功能7:按斗地主方式对发出的牌理牌(从大到小排序,2最大), rankCardsDDZ
功能8:按自定义方式对发出的牌理牌(先按花色(黑>红>方>草),再按牌值(相同花色内2最大)),rankCardsUDF()
写一个主控程序:MainProcess类(包含main函数)
调用CardOperator完成各种卡牌操作
MainProcess类(直接copy下页中的代码即可)
输出结果如下页ppt所示
答案:
按如图所示建立java包和类:
- CardOperator类:
package cn.edu.hdu.test3.problem1;
import java.util.*;
public class CardOperator {
private int num_per_cards = 52; // 每副卡牌的数量
private int cards_num; // 一共几副牌
private int[][] cards; // 卡牌数组,例如3副牌,就是3*52的二维矩阵
private int deal_cards_num; // 指定发牌的数量
private int[] deal_cards; // 用于存储发出的牌
public CardOperator(int user_input_cards_num) {
// 接受用户指定的"几副牌"初始化成员变量
this.cards_num = user_input_cards_num;
this.cards = new int[this.cards_num][this.num_per_cards];
initialCards();
}
public void initialCards() {
// 每副牌都按照黑桃、红桃、方片、草花,A-K的顺序初始化
// 即系统认定先是13张黑桃,再13张红桃A-K,再13张方片A-K,最后13张草花A-K
for (int i = 0; i < cards_num; i++) {
for (int j = 0; j < num_per_cards; j++) {
cards[i][j] = j;
}
}
}
public void showCards() {
// 依次显示每副牌的牌面
for (int i = 0; i < cards_num; i++) {
System.out.println("Deck " + (i + 1) + ":");
for (int j = 0; j < num_per_cards; j++) {
System.out.print(getCardType(cards[i][j]) + getCardValue(cards[i][j]) + " ");
}
System.out.println();