本文目錄一覽:
- 1、用Java寫一個撲克牌類,撲克牌有花色和大小,並且有一個tostring方法,返回撲克牌的信息?
- 2、java寫一個撲克牌程序
- 3、Java撲克牌問題
- 4、java 中如何實現一副撲克牌洗牌的功能。如果無法書寫完整的代碼,可以用文字描述出自己的實現思路
用Java寫一個撲克牌類,撲克牌有花色和大小,並且有一個tostring方法,返回撲克牌的信息?
Card[] cards = new Card[54]; // 這是一個數組,是一個普通對象。
Player[] players = new Player[3]; // 這是一個數組,是一個普通對象。
第一行,調用了數組 cards 上索引為 0 的元素的 toString 方法,對應於 Card 類的 toString 方法。
第二行,調用了數組 cards 的 toString 方法,對應於 Card[] 類的 toString 方法,繼承自 Object 類。
第三行,調用了 Arrays 類的 toString 方法,傳入參數是數組 cards ,具體可查找該方法的源碼。
第四行,調用了數組 players 上索引為 0 的元素的 toString 方法,對應於 Player 類的 toString 方法。
第五行,調用了數組 players 的 toString 方法,對應於 Player[] 類的 toString 方法,繼承自 Object 類。
第六行,調用了 Arrays 類的 toString 方法,傳入參數是數組 players ,具體可查找該方法的源碼。
簡單說一下 Arrays.toString() ,它返回是由數組內所有元素的字符串化(toString)合併而成的字符串對象。
因此:
1. 不是同一個 toString 方法,任何對象都可調用自身的 toString 方法。
2. 因為 Player 類的 toString 方法內曾調用了“ Arrays.toString(cards) ”。
4. 任何對象都可調用自身的 toString 方法,數組是對象。
5. 數組是對象,一樣有對應的類型,其類型一樣繼承自 Object 類,繼承了 toString 方法。
最後,有任何疑問請追問。
java寫一個撲克牌程序
使用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; ideck.length; i++)
{
System.out.println(deck[i]);
} */
}
}
Java撲克牌問題
使用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; ideck.length; i++)
{
System.out.println(deck[i]);
} */
}
}
java 中如何實現一副撲克牌洗牌的功能。如果無法書寫完整的代碼,可以用文字描述出自己的實現思路
1.定義牌類
public class Card{
public int id;//牌大小
public String number;//牌值名稱
public String color;//花色
}
2.定義牌組,用ArrayList存放所有牌
ArrayListCard cardGroup =new ArrayListCard();
3.定義花色枚舉
public static final String[] COLORS=new String[]{“方塊”,”梅花”,”紅桃”,”黑桃”};
4.定義牌值大小枚舉
public static fina String[] CARDVALUES=new String[]{“A”,”1″,”2″,”3″,
“4”,”5″,”6″,”7″,”8″,”9″,”10″,”J”,”Q”,”K”,”King_Small”,”King_Big”};
5.初始化牌組,這就是一副新牌,沒切過,己經排好序的
public void initCardGroup(){
//加入A~K
for(int i=0;i13;i++){
for (int j=0;j4;j++){
//生成一張牌的對象
Card card=new Card();
card.id=i;
card.color=COLORS[j];
card.munber=CARDVALUES[i];
//將對象加入牌組
cardGroup.add(card);
}
}
//加入大小王
Card card_k1=new Card();
card_k1.id=13;
card_k1.color=”King_Small”;
card_k1.number=”King_Small”;
cardGroup.add(card_k1);
Card card_k2=new Card();
card_k2.id=14;
card_k2.color=”King_big”;
card_k2.number=”King_big”;
cardGroup.add(card_k2);
}
6. 洗牌,將原牌組打亂,得到新的牌組
public ArrayListCard flushCardsGroup(ArrayListCard src){
ArrayListCard result=new ArrayListCard();
while(src.size0){
int size=src.size();
//以size為限,生成0~size之間的隨機數
Random r=new Random();
int index=r.nextInt(size);
//對index做個檢查
if(index0){index=0;}
if(indexsize-1){index=size-1;}
//index就是撿出來的牌,加到新的數組中,從原來數組中刪除
Card card=src.get(index);
result.add(card);
card.remove(index);
}
return result;
}
原創文章,作者:LIFX0,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/127465.html