新建一套扑克,从中抽取三张不同的牌
在用其他类作为本类属性时(关联关系)一定要进行初始化(new),如果不初始化运行的时候会抛出空指针错误java.lang.NullPointException
package day12.day11homework;
import java.util.Arrays;
import java.util.Random;
//目前下面的程序已经可以成功的抽取到3张牌
//其他任务
//1.将抽取到的3张牌判断一下类型(豹子、三条?同花顺?同花?顺子?一对?散牌)
// 知识点:对于对象的排序 comparable接口 下compareTo方法
//2.可以进行多人游戏(多人玩一副牌)
// 知识点:集合、Comparator接口下compare方法
//2. 设计一个扑克牌类,扑克牌有花色、面值,设计一整套扑克牌类,可以包括52张牌(不包括大小王)
//,设计一个抽牌函数,可以抽取1张牌。(升级:抽取3张不重复的牌)
//思路:自定义类
class PokerCard{
String type;//花色 ♠♥♣♦
String value;//面值234...10JQKA
int realvalue;//真实值
public PokerCard(String type, String value, int realvalue) {
this.type = type;
this.value = value;
this.realvalue = realvalue;
}
}
// PokerCard p=new PokerCard();---- 花色 null 面值null 真实值0
// PokerCard p=new PokerCard("♠","A",数字);
class PokerCards{
PokerCard[] cards=new PokerCard[52];//index 0...51
public PokerCards(){
String[] types={"♠","♥","♣","♦"};
String[] values=new String[13];
for(int i=0;i<9;i++){
values[i]=String.valueOf(i+2);
}
values[9]="J";
values[10]="Q";
values[11]="K";
values[12]="A";
int index=0;
for(String t:types){
for (int i = 0; i < values.length; i++) {
this.cards[index]=new PokerCard(t,values[i],i+2);
index++;
}
}
}
}
class Person{
String name;
public Person(String name) {
this.name = name;
}
PokerCard[] sample(PokerCards pcs){
// pcs.cards 52张牌的数组
// 为了操作方法,所以起一个引用名(变量的赋值)
PokerCard [] cards=pcs.cards;
// 抽取一张牌
// Random r=new Random();
// int index=r.nextInt(52);
// PokerCard p=cards[index];
// System.out.println(p.type+p.value); //PokerCard对象
// 抽取多张牌(3张)
// sampleCards来负责装抽取好的3张牌
PokerCard[] sampleCards=new PokerCard[3];
Random r=new Random();
int i=0;//i 0 1 2 只能是抽取成功之后,才++
while(true){
// 因为只能抽取有效的三张牌,所以如果已经成功抽取到3张牌,则要跳出循环
// if(i==3)
if(sampleCards[2]!=null)
break;
int index=r.nextInt(52);
// 在装入抽取好的三张牌数组中之前,先判断一下,这张牌是否有效
// 有效判断条件:这张牌!=null
if(cards[index]!=null){//成功的抽取到有效的牌
sampleCards[i]=cards[index];
// 抽取完的那张牌给它删掉(数组不允许删除元素,所以只能通过将那一个已经抽取出来的牌设置成null)
// [PokerCard1,PokerCard2,PokerCard3.....]
cards[index]=null;
i++;
}
}
return sampleCards;
}
}
public class Que2 {
public static void main(String[] args) {
PokerCards pcs=new PokerCards();//pcs对象下cards属性是52张牌
Person p=new Person("张三");
// pcs.cards 52张的数组
// for (PokerCard p : pcs.cards) {
// System.out.println(p.type+p.value);
// }
PokerCard[] samplecards=p.sample(pcs);//数组PokerCard[]
for (PokerCard pokerCard : samplecards) {
System.out.println(pokerCard.type+pokerCard.value);
}
}
// 在main方法中组成52张牌
// public static void main(String[] args) {
// PokerCard[] cards=new PokerCard[52];//index 0...51
//// 希望做到的是 ,对每一张扑克牌进行赋值:cards[index]=每一张牌Card对象
//
//// 存储所有的花色
// String[] types={"♠","♥","♣","♦"};
//// 存储所有的面值
// String[] values=new String[13];// 2 3 4 5 .....10 J Q K A
//// index 0 1 ......... 8 9 10 11 12
//// value 2 3 4 5 10 J Q K A
//// realvalue 2 3 4 5 10 11 12 13 14
// for(int i=0;i<9;i++){
// values[i]=String.valueOf(i+2);
// }
// values[9]="J";
// values[10]="Q";
// values[11]="K";
// values[12]="A";
// int index=0;//使用下面的嵌套循环产生的0 1 2.....51的数字,用来充当索引
// for(String t:types){//4
// for (int i = 0; i < values.length; i++) {//13
//// cards的数组中,每个元素都是PokerCard
// cards[index]=new PokerCard(t,values[i],i+2);
// index++;
// }
// }
//// System.out.println(Arrays.toString(cards));
// for (PokerCard p : cards) {
// System.out.println(p.type+p.value);
// }
// }
}