基本要求:
思路:
这里我们只需要创建一个对象Card,并定义出牌面值和花色两个成员属性; 写出该对象的构造方法和toString方法即可;
package demo1;
public class Card {
public int rank;//牌面值
public String suit;//花色
public Card(int rank, String suit) {
this.rank = rank;
this.suit = suit;
}
@Override
public String toString() {
return suit + rank;
}
}Card类型或其子类型。创建好一张牌我们就追加到列表当中 public static final String[] suits = {"♥","♠","♣","♦"};
public List<Card> buyCard() {
List<Card> cardList = new ArrayList<>();
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 13; j++) {
int rank = j;//牌数大小
String suit = suits[i];
Card card = new Card(rank,suit);
cardList.add(card);//生成了一张牌追加到顺序表中
}
}
return cardList;
}如何洗牌?顺序表的底层是一个数组,我们只需要将数组中最后一个数字与前面随机位置的数字进行交换即可;所以生成0~总牌数-1大小的随机数,直到只剩一个元素时,停止循环。

注:虽然顺序表的底层是一个数组,但在进行元素交换时不能直接使用[下标]的方式来进行交换,需要通过get方法获取,set方法更新来实现交换操作。
//洗牌操作
//把牌传过来
public void shuffle(List<Card> cardList) {
Random random = new Random();
for (int i = cardList.size()-1;i>0; i--) {
int randIndex= random.nextInt(i);//生成0~i的随机数放入randIndex
swap(cardList,i,randIndex);
}
}
private void swap(List<Card> cardList,int i,int j) {
Card tmp = cardList.get(i);
cardList.set(i,cardList.get(i));
cardList.set(j,tmp);
}每个人抓的牌放到哪里?创建一个顺序表,每次抓到的牌add到对应人的手中 三个人怎么轮流抓取五张牌?通过双层for循环来实现,第一轮每人抓一张牌,进行五轮 怎么抓牌?通过remove来删除0下标的牌 抓的牌放到谁的手中?抓牌后添加到对应的人的手中,i就表示第几个人

此时相当于创建了一个二维数组,每个元素类型为List<Card>,表中存储对应的五张牌
//三个人, 每个人轮流抓5张牌
public void drawCard(List<Card> cardList){
List<Card> hand1=new ArrayList<>();
List<Card> hand2=new ArrayList<>();
List<Card> hand3=new ArrayList<>();
List<List<Card>>hands=new ArrayList<>();
hands.add(hand1);
hands.add(hand2);
hands.add(hand3);
for (int i = 0; i < 5; i++) {//i代表5张牌
for (int j = 0; j < 3; j++) {//j代表3个人
Card card=cardList.remove(0); //怎么抓牌? 每次删除0下标的牌
hands.get(j).add(card);//hands.get(0)=hand1,以此类推
}
}
System.out.println("第1个人的牌:"+hand1);
System.out.println("第2个人的牌:"+hand2);
System.out.println("第3个人的牌:"+hand3);
}package demo1;
import java.util.List;
public class Test {
public static void main(String[] args) {
Cards cards=new Cards();
List<Card> cardList=cards.buyCard();
System.out.println("生成一副扑克牌:");
System.out.println(cardList);
cards.shuffle(cardList);
System.out.println("洗牌后:");
System.out.println(cardList);
System.out.println("抓牌:");
cards.drawCard(cardList);
System.out.println("剩下的牌:");
System.out.println(cardList);
}
}package demo1;
import java.util.List;
public class Test {
public static void main(String[] args) {
Cards cards=new Cards();
List<Card> cardList=cards.buyCard();
System.out.println("生成一副扑克牌:");
System.out.println(cardList);
cards.shuffle(cardList);
System.out.println("洗牌后:");
System.out.println(cardList);
System.out.println("抓牌:");
cards.drawCard(cardList);
System.out.println("剩下的牌:");
System.out.println(cardList);
}
}
思路:
List<List<Integer>>表示创建了一个顺序表,顺序表中的每一个元素都是存储整形的顺序表当i==j时的位置上都是1,直接添加到顺序表即可,其他位置上的值:例如[2][1]的3==[1][2]的2+[1][1]1,这样就生成了一组数据,每生成一组就追加到顺序表中

class Solution {
//numRows表示行
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> list = new ArrayList<List<Integer>>();
List<Integer> list1 = new ArrayList<>();
list1.add(1);
list.add(list1);
for (int i = 1; i < numRows; i++) {
List<Integer> cur = new ArrayList<>();
cur.add(1);
List<Integer> pre = list.get(i-1);
for (int j = 1; j < i; j++) {
cur.add(pre.get(j) + pre.get(j-1));
}
cur.add(1);
list.add(cur);
}
return list;
}
}class Solution {
//numRows表示行
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> list = new ArrayList<List<Integer>>();
for (int i = 0; i < numRows; i++) {
List<Integer> list1 = new ArrayList<>();
for (int j = 0; j <= i; j++) {
if (j == 0 || i == j) {
list1.add(1);
} else {
list1.add(list.get(i-1).get(j-1) + list.get(i-1).get(j));
}
}
list.add(list1);
}
return list;
}
}