Java(4种方法和扩展):牌54张,三个人斗地主,给每个人各17牌,并且还要有3张底牌

(个人认为方法三最好,最好理解和最简单)












一副牌是54张,三个人斗地主,进行分牌,分给每个人牌,并且还有有底牌
方法一:
package a;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Random;
public class lizi {
public static void main(String[] args) {
String[] pai = new String[] { "3", "4", "5", "6", "7", "8", "9", "10",
"J", "Q", "K", "A", "2" };
HashMap<String, Integer> hj = new HashMap<>();
HashMap<String, Integer> hy = new HashMap<>();
HashMap<String, Integer> hb = new HashMap<>();
List<String> a = new ArrayList<String>();
for (int i = 0; i < pai.length; i++) {
a.add(pai[i]);
a.add(pai[i]);
a.add(pai[i]);
a.add(pai[i]);
}
a.add("大王");
a.add("小王");
Random rand = new Random();
String temp = null;
for (int k = 0; k < 100; k++) {
int p = a.size();
int l = rand.nextInt(p);
int m = rand.nextInt(p);
if (l == m)
continue;
{
temp = a.get(l);
a.set(l, a.get(m));
a.set(m, temp);
}
}
// Collections.shuffle(a);
List<String> j = new ArrayList<String>();
List<String> y = new ArrayList<String>();
List<String> b = new ArrayList<String>();
List<String> d = new ArrayList<String>();
for (int i = 0; i < a.size(); i++) {
if (i >= a.size() - 3) {
d.add(a.get(i));
} else if (i % 3 == 0) {
j.add(a.get(i));
} else if (i % 3 == 1) {
y.add(a.get(i));
} else if (i % 3 == 2) {
b.add(a.get(i));
}
}
System.out.println("底牌:" + d);
System.out.println("甲被发到的牌:" + j);
System.out.println("乙被发到的牌:" + y);
System.out.println("丙被发到的牌:" + b);
for (String str : j) {
if (hj.containsKey(str)) {
hj.put(str, hj.get(str) + 1);
} else
hj.put(str, 1);
}
System.out.println("1代表♥, 2代表♠, 3代表♦,4代表♣");
System.out.println("甲被发到的牌对应图形情况:" + hj);
for (String str : y) {
if (hy.containsKey(str)) {
hy.put(str, hy.get(str) + 1);
} else
hy.put(str, 1);
}
System.out.println("乙被发到的牌对应图形情况:" + hy);
for (String str : b) {
if (hb.containsKey(str)) {
hb.put(str, hb.get(str) + 1);
} else
hb.put(str, 1);
}
System.out.println("丙被发到的牌对应图形情况:" + hb);
}
}






方法二:
package a;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Random;
public class lizi {
public static void main(String[] args) {
String[] Stringchucundepai = new String[] { "A", "2", "3", "4", "5",
"6", "7", "8", "9", "10", "J", "Q", "K" };
HashMap<String, Integer> HSchucundejiadepai = new HashMap<>();
HashMap<String, Integer> HSchucundeyidepai = new HashMap<>();
HashMap<String, Integer> HSchucundebingdepai = new HashMap<>();
/*♥,♠,♦,♣共12个
* 个人理解:HSchucundejiadepai是用HashMap储存的甲的牌<String, Integer>为泛型的应用,
* 表明只储存String和Integer类型的数据
*/
ArrayList<String> yongALchucundeshuju = new ArrayList<String>();
/*
* 个人理解:这里的<String>为泛型,是规定集合可储存范围条件的,
* ArrayList<String>表明只储存String到ArrayList里面
*/
for (int i = 0; i < Stringchucundepai.length; i++) {
/* Stringchucundepai.length=13 */
yongALchucundeshuju.add(Stringchucundepai[i]);
yongALchucundeshuju.add(Stringchucundepai[i]);
yongALchucundeshuju.add(Stringchucundepai[i]);
yongALchucundeshuju.add(Stringchucundepai[i]);
/*
* 用add和for循环,在"(用ArrayList储存的String数据)yongALchucundeshuju"中添加了
* 4个"Stringchucundepai[0]("A")到Stringchucundepai[12]("K")",13*4=52
*/
}
yongALchucundeshuju.add("大王");
yongALchucundeshuju.add("小王");
/*
* 用add在"(用ArrayList储存的String数据)yongALchucundeshuju"中添加了
* "大王","小王",13*4+2=54
*/
Random suijishu = new Random();
/* suijishu为用Random得到的随机数 */
String fangzidawangxiaowangchongfu = null;/*
* fangzidawangxiaowangchongfu是防止
* "大王"
* "小王"等重复的,这种先在for外面设null的方法可常用于防重复
*/
for (int k = 0; k < 100; k++) {
int zongpaishu = yongALchucundeshuju.size();
/* yongALchucundeshuju.size()=13*4+2=54,zongpaishu为总牌数 */
int yongRandomdedaodesuijishu1 = suijishu.nextInt(zongpaishu);
/*
* suijishu为随机数, nextInt用于规定随机数suijishu可取值得范围,这里是zongpaishu,即54。
* nextInt(54)等同于nextInt(54)+0,就是0到54(含头不含尾),即为0到53(含头含尾)
* “yongRandomdedaodesuijishu1”是“用Random得到的随机数1”
*/
int yongRandomdedaodesuijishu2 = suijishu.nextInt(zongpaishu);
if (yongRandomdedaodesuijishu1 == yongRandomdedaodesuijishu2)
continue;/*
* 这里continue表明当用Random得到的随机数1=用Random得到的随机数2时,
* 跳过当次循环中剩下的语句,执行下一次循环(即不执行且不出现“用Random得到的随机数1=
* 用Random得到的随机数2”的情况, 其他的{}中的语句会执行 ,
*/
/*
* continue和break有点类似,区别在于continue只是终止本次循环,接着还执行后面的循环,break则完全终止循环。
*
* 可以理解为continue是跳过当次循环中剩下的语句,执行下一次循环。
*/
{
fangzidawangxiaowangchongfu = yongALchucundeshuju
.get(yongRandomdedaodesuijishu1);
/* 这里有一个赋值的过程,就像进行两个变量a和b,用c进行交换a和b的值,防止a,b在赋值时相等 */
yongALchucundeshuju.set(yongRandomdedaodesuijishu1,
yongALchucundeshuju.get(yongRandomdedaodesuijishu2));
yongALchucundeshuju.set(yongRandomdedaodesuijishu2,
fangzidawangxiaowangchongfu);
}/*
* 个人理解:set用于插入数据,这里往yongALchucundeshuju中插入
* yongRandomdedaodesuijishu1(int类型),
* yongALchucundeshuju.get(yongRandomdedaodesuijishu2)
* (yongRandomdedaodesuijishu2这里为下标,含头含尾的0到53)
* 等数据,yongALchucundeshuju 储存了得到的数据,要用时就拿出来
*/
}
ArrayList<String> yongALchucundejiadepai = new ArrayList<String>();
ArrayList<String> yongALchucundeyidedepai = new ArrayList<String>();
ArrayList<String> yongALchucundebingdepai = new ArrayList<String>();
ArrayList<String> yongALchucundedipai = new ArrayList<String>();
for (int i = 0; i < yongALchucundeshuju.size(); i++) {
/* yongALchucundeshuju.size() =54 */
if (i >= yongALchucundeshuju.size() - 3) {
/* yongALchucundeshuju.size() - 3=54-3=52 */
yongALchucundedipai.add(yongALchucundeshuju.get(i));
/*
* yongALchucundedipai为用ArrayList储存的底牌,i可为含头含尾的0到53
* yongALchucundeshuju.get(i)就可为含头含尾的4组“"A", "2", "3", "4", "5",
* "6", "7", "8", "9", "10", "J", "Q", "K"”和一组"大王","小王"
*/
} else if (i % 3 == 0) {
/*
* i % 3 == 0表明可被3整除余数为0, 在含头含尾的下标0到53中,出现i % 3 == 0和出现i % 3 ==
* 1和 出现i % 3 == 2的概率互相相同,“0,1,2”,“3,4,5”,......“51,52,53”
* 编程,电脑,大脑等就是“储存和取出”
*/
yongALchucundejiadepai.add(yongALchucundeshuju.get(i));
} else if (i % 3 == 1) {
yongALchucundeyidedepai.add(yongALchucundeshuju.get(i));
} else if (i % 3 == 2) {
yongALchucundebingdepai.add(yongALchucundeshuju.get(i));
}
}
System.out.println("底牌:" + yongALchucundedipai);
System.out.println("甲被发到的牌:" + yongALchucundejiadepai);
System.out.println("乙被发到的牌:" + yongALchucundeyidedepai);
System.out.println("丙被发到的牌:" + yongALchucundebingdepai);
}}






一副牌是54张,三个人斗地主,进行分牌,分给每个人牌,并且还有有底牌
方法三:
package a;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Random;
public class lizi {
public static void main(String[] args) {
String[] Stringchucundepai = new String[] { "♥A", "♥2", "♥3", "♥4",
"♥5", "♥6", "♥7", "♥8", "♥9", "♥10", "♥J", "♥Q", "♥K", "♠A",
"♠2", "♠3", "♠4", "♠5", "♠6", "♠7", "♠8", "♠9", "♠10", "♠J",
"♠Q", "♠K", "♦A", "♦2", "♦3", "♦4", "♦5", "♦6", "♦7", "♦8",
"♦9", "♦10", "♦J", "♦Q", "♦K", "♣A", "♣2", "♣3", "♣4", "♣5",
"♣6", "♣7", "♣8", "♣9", "♣10", "♣J", "♣Q", "♣K" };
HashMap<String, Integer> HSchucundejiadepai = new HashMap<>();
HashMap<String, Integer> HSchucundeyidepai = new HashMap<>();
HashMap<String, Integer> HSchucundebingdepai = new HashMap<>();
ArrayList<String> yongALchucundeshuju = new ArrayList<String>();
for (int i = 0; i < Stringchucundepai.length; i++) {
yongALchucundeshuju.add(Stringchucundepai[i]);
}
yongALchucundeshuju.add("大王");
yongALchucundeshuju.add("小王");
Random suijishu = new Random();
String fangzidawangxiaowangchongfu = null;
for (int k = 0; k < 100; k++) {
int zongpaishu = yongALchucundeshuju.size();
int yongRandomdedaodesuijishu1 = suijishu.nextInt(zongpaishu);
int yongRandomdedaodesuijishu2 = suijishu.nextInt(zongpaishu);
if (yongRandomdedaodesuijishu1 == yongRandomdedaodesuijishu2)
continue;
{
fangzidawangxiaowangchongfu = yongALchucundeshuju
.get(yongRandomdedaodesuijishu1);
yongALchucundeshuju.set(yongRandomdedaodesuijishu1,
yongALchucundeshuju.get(yongRandomdedaodesuijishu2));
yongALchucundeshuju.set(yongRandomdedaodesuijishu2,
fangzidawangxiaowangchongfu);
}
}
ArrayList<String> yongALchucundejiadepai = new ArrayList<String>();
ArrayList<String> yongALchucundeyidedepai = new ArrayList<String>();
ArrayList<String> yongALchucundebingdepai = new ArrayList<String>();
ArrayList<String> yongALchucundedipai = new ArrayList<String>();
for (int i = 0; i < yongALchucundeshuju.size(); i++) {
if (i >= yongALchucundeshuju.size() - 3) {
yongALchucundedipai.add(yongALchucundeshuju.get(i));
} else if (i % 3 == 0) {
yongALchucundejiadepai.add(yongALchucundeshuju.get(i));
} else if (i % 3 == 1) {
yongALchucundeyidedepai.add(yongALchucundeshuju.get(i));
} else if (i % 3 == 2) {
yongALchucundebingdepai.add(yongALchucundeshuju.get(i));
}
}
System.out.println("底牌:" + yongALchucundedipai);
System.out.println("甲被发到的牌:" + yongALchucundejiadepai);
System.out.println("乙被发到的牌:" + yongALchucundeyidedepai);
System.out.println("丙被发到的牌:" + yongALchucundebingdepai);
}
}





/*ArrayList和HashMap都是无序的*/
方法四:
一副牌是54张,三个人斗地主,进行分牌,分给每个人牌,并且还有有底牌
package a;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Random;
public class lizi {
public static void main(String[] args) {
String[] Stringchucundepai = new String[] { "♥A", "♥2", "♥3", "♥4",
"♥5", "♥6", "♥7", "♥8", "♥9", "♥10", "♥J", "♥Q", "♥K", "♠A",
"♠2", "♠3", "♠4", "♠5", "♠6", "♠7", "♠8", "♠9", "♠10", "♠J",
"♠Q", "♠K", "♦A", "♦2", "♦3", "♦4", "♦5", "♦6", "♦7", "♦8",
"♦9", "♦10", "♦J", "♦Q", "♦K", "♣A", "♣2", "♣3", "♣4", "♣5",
"♣6", "♣7", "♣8", "♣9", "♣10", "♣J", "♣Q", "♣K" };
HashMap<String, Integer> HSchucundejiadepai = new HashMap<>();
HashMap<String, Integer> HSchucundeyidepai = new HashMap<>();
HashMap<String, Integer> HSchucundebingdepai = new HashMap<>();
ArrayList<String> yongALchucundeshuju = new ArrayList<String>();
for (int i = 0; i < Stringchucundepai.length; i++) {
yongALchucundeshuju.add(Stringchucundepai[i]);
}
yongALchucundeshuju.add("大王");
yongALchucundeshuju.add("小王");
Random suijishu = new Random();
String fangzidawangxiaowangchongfu = null;
for (int k = 0; k < 100; k++) {
int zongpaishu = yongALchucundeshuju.size();
int yongRandomdedaodesuijishu1 = suijishu.nextInt(zongpaishu);
int yongRandomdedaodesuijishu2 = suijishu.nextInt(zongpaishu);
if (yongRandomdedaodesuijishu1 == yongRandomdedaodesuijishu2)
continue;
{
fangzidawangxiaowangchongfu = yongALchucundeshuju
.get(yongRandomdedaodesuijishu1);
yongALchucundeshuju.set(yongRandomdedaodesuijishu1,
yongALchucundeshuju.get(yongRandomdedaodesuijishu2));
yongALchucundeshuju.set(yongRandomdedaodesuijishu2,
fangzidawangxiaowangchongfu);
}
}
HashSet<String> yongHSchucundejiadepai = new HashSet<String>();
HashSet<String> yongHSchucundeyidedepai = new HashSet<String>();
HashSet<String> yongHSchucundebingdepai = new HashSet<String>();
HashSet<String> yongHSchucundedipai = new HashSet<String>();
for (int i = 0; i < yongALchucundeshuju.size(); i++) {
if (i >= yongALchucundeshuju.size() - 3) {
yongHSchucundedipai.add(yongALchucundeshuju.get(i));
} else if (i % 3 == 0) {
yongHSchucundejiadepai.add(yongALchucundeshuju.get(i));
} else if (i % 3 == 1) {
yongHSchucundeyidedepai.add(yongALchucundeshuju.get(i));
} else if (i % 3 == 2) {
yongHSchucundebingdepai.add(yongALchucundeshuju.get(i));
}
}
System.out.println("底牌:" + yongHSchucundedipai);
System.out.println("甲被发到的牌:" + yongHSchucundejiadepai);
System.out.println("乙被发到的牌:" + yongHSchucundeyidedepai);
System.out.println("丙被发到的牌:" + yongHSchucundebingdepai);
}
}




















