使用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、请定义一个名为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]);
} */
}}
public String toString() {
return suit + " " + face;
}
是什么意思 不写可以么 谢谢谢了
而在这的话,他返回的是以空格分隔的字符串,可以理解为toString()方法重写
个人理解、、、
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++;
}
}
}
}
写这个就好看些,知道具体是哪个牌。我看这个打印只是在被注释掉的test里有用,所以应该不写也不影响解题
/** 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;
}
}
}
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();
}
}
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();
}
}