1.洗牌算法
1.1 普通牌对象
public class Card {
public String rank;//牌面
public String suit;//花色
//构造方法
public Card(String rank, String suit) {
this.rank = rank;
this.suit = suit;
}
@Override
public String toString() {
return "{"+suit+","+rank+"}";
}
}
1.2 对牌的操作
//买一副牌
public static ArrayList<Card> buyCards(){
ArrayList<Card> cards=new ArrayList<>();
for(int i=1;i<=13;i++){
for (int j=0;j<4;j++){
Card card=null;
if(i==1){
card=new Card("A",suits[j]);
}else if(i==11){
card=new Card("J",suits[j]);
}else if(i==12){
card=new Card("Q",suits[j]);
}else if(i==13){
card=new Card("K",suits[j]);
}else if(i==10){
card=new Card("10",suits[j]);
}else {
card=new Card(i+"",suits[j]);
}
cards.add(card);
}
}
return cards;
}
//洗牌
public static void shuffle(ArrayList<Card> cards){
Random random=new Random();
for(int i=51;i>0;i--){
int rand=random.nextInt(i);//生成一个0~i的随机数,不包含i
swap(cards,i,rand);
}
}
private static void swap(ArrayList<Card> cards,int i,int j){
Card temp=cards.get(i);
cards.set(i,cards.get(j));
cards.set(j,temp);
}
1.2 测试代码
//测试函数
public static void main(String[] args) {
ArrayList<Card> cards=new ArrayList<>();
System.out.println("新买的牌:");
cards=Cards.buyCards();
System.out.println(cards);
System.out.println();
System.out.println("洗完牌后:");
Cards.shuffle(cards);
System.out.println(cards);
}
1.2 测试结果
1.3 抓牌操作
public static void drawCard(ArrayList<Card> arrayList){
ArrayList<Card> hand1=new ArrayList<>();
ArrayList<Card> hand2=new ArrayList<>();
ArrayList<Card> hand3=new ArrayList<>();
//添加三个人的手牌
ArrayList<ArrayList<Card>> hands=new ArrayList<>();
hands.add(hand1);
hands.add(hand2);
hands.add(hand3);
//每个人抓5张牌
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 3; j++) {
hands.get(j).add(arrayList.remove(0));//把牌存入每个人手牌并把摸过的牌删掉
}
}
//打印每个人的手牌
System.out.println("第1个人的牌:"+hand1);
System.out.println("第2个人的牌:"+hand2);
System.out.println("第3个人的牌:"+hand3);
}
1.3 测试代码
public static void main(String[] args) {
ArrayList<Card> cards=new ArrayList<>();
//买一副牌
cards=Cards.buyCards();
System.out.println("洗完牌后:");
//洗牌
Cards.shuffle(cards);
System.out.println(cards);
System.out.println();
System.out.println("抓牌");
//抓牌
Cards.drawCard(cards);
System.out.println();
System.out.println("抓完牌后:");
System.out.println(cards);
}
1.3 测试结果
2.杨辉三角
public static void main(String[] args) {
List<List<Integer>> nums=new ArrayList<>();
Scanner scan=new Scanner(System.in);
int n=scan.nextInt();
for (int i = 1; i <= n; i++) {
List<Integer> list=new ArrayList<>();
list.add(1);
for (int j = 1; j < i-1; j++) {
/*
*原本杨辉三角的加项为a[i][j]=a[i-1][j-1]+a[i-1][j]
*这个通过顺序表来写,这个代码将首行设为1,而实际下标从0开始
*所以用i-2
*/
list.add(nums.get(i-2).get(j-1)+nums.get(i-2).get(j));
}
if(i!=1){
list.add(1);
}
nums.add(list);
}
for(List<Integer> list:nums){
System.out.println(list);
}
}
测试