用java写发牌程序 a.108张牌发给6个人 b.找出6个人中对子数最多的人 简洁清晰的代码

用java写发牌程序a.108张牌发给6个人b.找出6个人中对子数最多的人简洁清晰的代码最好有注释... 用java写发牌程序 a.108张牌发给6个人 b.找出6个人中对子数最多的人 简洁清晰的代码最好有注释 展开
 我来答
bwpy
2017-04-29 · TA获得超过1604个赞
知道小有建树答主
回答量:1831
采纳率:76%
帮助的人:325万
展开全部

import java.util.Arrays;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Random;
public class Licensing {
public static void main(String[] args) {
LinkedList<Integer> card = new LinkedList<Integer>();
int max = 108;
Random r = new Random();
/*下边的代码是定义一副牌*/
for(int i = 0;i < 8;++i)
for(int j = 1;j <= 13;++j)
card.add(j);
for(int k = 0;k < 2;++k){
card.add(14);
card.add(15);
}
Player[] p = new Player[6];//定义六个玩家
for(int i = 0;i<6;++i){
p[i] = new Player();
}
while(max > 0){//发牌
for(int m = 0;m<6;++m){
    int index = r.nextInt(max);
    max--;
    if(max < 0)
     break;
    Integer a = card.get(index);
    card.remove(a);
    p[m].myCard.add(a);
}
}
int[] pp = new int[6];
for(int w = 0;w<6;++w)
pp[w] = p[w].pairs();
Arrays.sort(pp);
for(int e = 0;e<6;++e){
if(p[e].pairs()==pp[5])
System.out.println("第"+e+"位玩家获胜了");
}

}
}
class Player{
public LinkedList<Integer> myCard;
public String name;
public Player(){
myCard = new LinkedList<Integer>();
}
public int pairs(){
int sum = 0;
if(myCard != null){
LinkedList<Integer> tempCard = myCard;
Iterator<Integer> it = tempCard.iterator();

int in = 0;
if(myCard != null){
while(it.hasNext()){
it.next();
++in;
}
int c =-1;
for(int i = 0;i < in;++i){
if(i == c)
continue;
for(int j = i+1;j<in;++j){
if((int)tempCard.get(i) == (int)tempCard.get(j)){
++sum;
    c = j;
    break;
}
}
}
}
}
return sum;
}
}
更多追问追答
追问

为什么有2个胜利

追答
因为每次发牌是随机的,两个胜利说明这两个人对子数相同,且都是最大的
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式