日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

list集合练习----斗地主

發(fā)布時(shí)間:2023/12/20 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 list集合练习----斗地主 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

要求:

1、自定義洗牌方式,不能使用Collections.shuffle(pokers);方法

2、發(fā)完牌后對(duì)撲克牌進(jìn)行排序

一、初始化撲克牌

分析:

把撲克牌一一存進(jìn)list集合

分析:定義并靜態(tài)初始化兩個(gè)數(shù)組,一個(gè)存儲(chǔ)花色colors[],一個(gè)存儲(chǔ)數(shù)值numbers[]

兩個(gè)for循環(huán)遍歷把撲克牌存進(jìn)list,然后加上”大王“ ”小王“。

public static void initPorkers(ArrayList<String> list){String[] numbers = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};String[] colors = {"?", "?", "?", "?"};for (String color: colors){for (String number: numbers) {String poker = color+number;list.add(poker);}}list.add("大🃏");list.add("小🃏");System.out.print("發(fā)牌前:");for (String p:list) {System.out.print(p);}}

二、洗牌(打亂排序)

// Collections.shuffle(list); // System.out.println("打亂牌后:"+list);

也可以直接使用上述方法打亂順序。

分析

根據(jù) set 的不可重復(fù)性定義一個(gè)Set集合,把隨機(jī)生成的數(shù)存進(jìn)Set集合

然后把Set轉(zhuǎn)為list集合,遍歷List結(jié)合,根據(jù)Set集合的下標(biāo)獲取到原來List的牌值,然后存進(jìn)新List集合。

public static ArrayList daluanPokers(ArrayList<String> list){ArrayList<String> list1 = new ArrayList<>();//洗完牌的集合Set<Integer> pokers =new LinkedHashSet<>();Random r = new Random();while(pokers.size()<list.size()){int randonNum = r.nextInt(54);pokers.add(randonNum);}ArrayList<Integer> arrayList = new ArrayList<>(pokers);for (int i=0;i<arrayList.size();i++){list1.add(list.get(arrayList.get(i)));}return list1; // Collections.shuffle(list); // System.out.println("打亂牌后:"+list);}

三、發(fā)牌

分析

共有54張牌,3張底牌

ublic static void faPokers(ArrayList<String> list,ArrayList<String> play01,ArrayList<String> play02,ArrayList<String> play03,ArrayList<String> dipai){for (int i=0;i<list.size();i++){String poker = list.get(i);if (i>50){dipai.add(poker);}else if (i%3==0){play01.add(poker);}else if (i%3==1){play02.add(poker);}else {play03.add(poker);}}System.out.print("玩家1排序前的牌:");for (String poker : play01) {System.out.print(poker + " ");}System.out.println();System.out.print("玩家2排序前的牌:");for (String poker : play02) {System.out.print(poker + " ");}System.out.println();System.out.print("玩家3排序前的牌:");for (String poker : play03) {System.out.print(poker + " ");}System.out.println();System.out.print("底牌排序前的牌:");for (String poker : dipai) {System.out.print(poker + " ");}System.out.println();}

四、排序

這個(gè)排序方法是參考網(wǎng)上的,以下是我的分析

將每個(gè)牌按照牌的大小進(jìn)行賦值,“大王” “小王”為最大,所以分別賦值為162,161;

‘2’,‘A’,‘K’,‘Q’,‘J ’,依次為150,140,130,120,110

由于我前面初始化撲克牌時(shí)的拼接是 花色加數(shù)字 ,所以我只需截取花色后面的字符 即 數(shù)字

3--10的牌,然后乘以10,就為 10,20,30......等數(shù)字了,最后再加上花色1,2,3,4,便可以把撲克牌字符轉(zhuǎn)為數(shù)字了,之后便是簡(jiǎn)單的排序

private static ArrayList<String> paixu(ArrayList<String> list){ArrayList<Integer> movecard=new ArrayList<>();int f=0;for (int i = 0; i < list.size(); i++) {if(list.get(i).equals("大🃏"))f=162;else if(list.get(i).equals("小🃏"))f=161;else {if (list.get(i).substring(1).equals("A"))f = 140;else if (list.get(i).substring(1).equals("2"))f = 150;else if (list.get(i).substring(1).equals("J"))f = 110;else if (list.get(i).substring(1).equals("Q"))f = 120;else if (list.get(i).substring(1).equals("K"))f = 130;else f= Integer.parseInt(list.get(i).substring(1)) * 10;if(list.get(i).substring(0,1).equals("?")){f+=4;}else if(list.get(i).substring(0,1).equals("?")){f+=3;}else if(list.get(i).substring(0,1).equals("?")){f+=2;}else if(list.get(i).substring(0,1).equals("?")){f+=1;}}movecard.add(f);}//System.out.print(movecard+" ");//正式排序for (int i = list.size(); i > 1; i--) {for (int j = 0; j < i-1; j++) {if(movecard.get(j) < movecard.get(j+1)){swap(movecard,j,j+1);swap(list,j,j+1);}}}// System.out.print("movecare:"+movecard);return list;}

swap方法如下:

private static <E> void swap(List<E> list, int index1, int index2) {E e=list.get(index1);//使用兩個(gè)set方法將j 和 j+1的值交換list.set(index1, list.get(index2));list.set(index2, e);//將index2位置上的元素用e替代,并返回原來的zhi}

注意:

最后還要將數(shù)字轉(zhuǎn)為撲克牌,

swap(list,j,j+1);便是此方法的關(guān)鍵

五、結(jié)果

?

總結(jié)

以上是生活随笔為你收集整理的list集合练习----斗地主的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。