扑克牌和杨辉三角(ArrayList的使用)
一、扑克牌(新牌、洗牌、分牌)
代码如下,注释比较清晰:
import java.util.ArrayList;
import java.util.List;
public class Card {
public String rank;//扑克牌面值
public String suit;//扑克牌花色
//重写打印方法
public String toString(){
return "("+rank+","+suit+")";
}
}
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class CardDemo {
public static final String[] Suits={"♥","♣","♦","♠"};
//方法一;新扑克牌
public static List<Card> buyCard(){
List<Card> cards=new ArrayList<>(52);
String group[]={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
for(int i=0;i<4;i++){
for(int j=0;j<group.length;j++){
String suit=Suits[i];
String rank=group[j];
Card card=new Card();
card.rank=rank;
card.suit=suit;
cards.add(card);
}
}
return cards;
}
//方法二:交换牌
public static void swap(List<Card> cards,int i,int a){
Card t=cards.get(i);
cards.set(i,cards.get(a));
cards.set(a,t);
}
//方法三:洗牌(调用方法二)
public static void shuffle(List<Card> cards){
Random random=new Random();
for(int i=cards.size()-1;i>0;i--){
int a=random.nextInt(i);
swap(cards,i,a);
}
}
public static void main(String[] args) {
List<Card> cards=buyCard();
System.out.println("崭新的扑克牌:");
System.out.println(cards);;
shuffle(cards);
System.out.println("洗过之后的扑克牌为:");
System.out.println(cards);
//游戏规则:三个人轮流抓五张牌。
List<List<Card>> hands=new ArrayList<>();//二维数组
hands.add(new ArrayList<>());
hands.add(new ArrayList<>());
hands.add(new ArrayList<>());
for(int i=0;i<5;i++){
for(int j=0;j<3;j++){
hands.get(j).add(cards.remove(0));
}
}
System.out.println("剩余的扑克牌:");
System.out.println(cards);
System.out.println("第一个人手中的牌:");
System.out.println(hands.get(0));
System.out.println("第二个人手中的牌:");
System.out.println(hands.get(1));
System.out.println("第三个人手中的牌:");
System.out.println(hands.get(2));
}
}
运行截图:
二、杨辉三角
代码如下,注释比较清晰:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
//杨辉三角
public class YangHuiTriangle {
public static void main(String[] args) {
System.out.println("Please enter the numRows");//请输入展示的行号
Scanner sc=new Scanner(System.in);
int numRows=sc.nextInt();
List<List<Integer>> list=new ArrayList<>();//等同于二维数组(动态数组,内部元素为动态数组)
//外层循环为设置每一行的内容
for(int i=0;i<numRows;i++){
//杨辉三角第i行就有i个元素,因为i初始值为0,所以ArrayList大小定义为i+1;
List<Integer> rowsdata=new ArrayList<>(i+1);
//设置当前行每一列的内容
for(int j=0;j<=i;j++){
//每一行的第一个元素和最后一个元素均为1
if(0==j||i==j){
rowsdata.add(1);
}else{
//将杨辉三角左对齐,发现中间的元素是由上一行的当前列元素和上一元素相加得来
//从List中得来
rowsdata.add(list.get(i-1).get(j)+list.get(i-1).get(j-1));
}
}
list.add(rowsdata);
}
System.out.println(list);
}
}
作者:Luka.lh