2 a761485716 a761485716 于 2018.01.03 12:11 提问

java斗地主如何实现记录手中相同牌的牌数

public static void main(String[] args) {
String[] pai = new String[] { "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K","A", "2" };
String[] hs = new String[] { "♥", "♠", "♦", "♣" };
List a = new ArrayList();
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("小王");

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);
}}
这是我已经写的代码,怎么实现记录手中相同牌数?
    还有如何用random的方法来打乱牌的顺序。
    求实际的代码!!

7个回答

zhichouchan0056
zhichouchan0056   2018.01.03 13:50
已采纳

/*按照您的要求,望采纳*/
import java.util.*;
public class Test {
public static void main(String[] args) {
String[] pai = new String[] { "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K","A", "2" };
String[] hs = new String[] { "♥", "♠", "♦", "♣" };
List a = new ArrayList();
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("小王");
//Collections.shuffle(a);
a=shuffle(a);
List j = new ArrayList();
List y = new ArrayList();
List b = new ArrayList();
List d = new ArrayList();
for (int i = 0; i < a.size(); i++) {
if (i >= a.size() - 3) {
d.add((String) a.get(i));
} else if (i % 3 == 0) {
j.add((String) a.get(i));
} else if (i % 3 == 1) {
y.add((String) a.get(i));
} else if (i % 3 == 2) {
b.add((String) a.get(i));
}
}

    System.out.println(d);
    duplicated(d);
    System.out.println(j);
    duplicated(j);
    System.out.println(y);
    duplicated(y);
    System.out.println(b);
    duplicated(b);
}
/*统计相同的牌*/
static void duplicated(List list){
    ArrayList pai=new ArrayList(list.size());//已经抽到的牌
    int n[] =new int[list.size()];//记录每张抽到的牌的数量,下标和上面的集合一一对应s
    for(int i=0;i<list.size();i++){//遍历手中的牌 
        String s=(String)(list.get(i));
        if(!pai.contains(s))pai.add(s);         
        n[pai.indexOf(s)]++;//牌数+1
    }
    for(int i=0;i<pai.size();i++)
        System.out.print("点数:"+(String)(pai.get(i))+",张数:"+n[i]+" ");
    System.out.println("");
}
/*洗牌*/
static List shuffle(List a){
    List temp=new ArrayList(a.size());//临时牌组,从a里面随机牌,放到temp中
    Random r=new Random();      
    while(a.size()>0){      //只要a中还有牌,则随机从a中抽牌加入temp中                                 
        int index=r.nextInt(a.size());//产生随机数
        temp.add((String) a.get(index));//将随机到的牌加入temp中               
        a.remove(index);//将抽到的牌从a中移除
    }
    return temp;
}

}

m564413010
m564413010   2018.01.03 13:16

看看会不会被删除

ljheee
ljheee   Rxr 2018.01.03 12:29
wilyong
wilyong 不太明白你的需求是啥,记录手中相同牌数是个什么意思?
21 天之前 回复
qq_41579907
qq_41579907 public static void main(String[] args) { String[] pai = new String[] { "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K","A", "2" }; String[] hs = new String[] { "♥", "♠", "♦", "♣" }; List a = new ArrayList(); 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("小王");
21 天之前 回复
qq_41579805
qq_41579805 猜猜
21 天之前 回复
a761485716
a761485716 回复zhichouchan0056: 手牌中相同牌的数量
21 天之前 回复
a761485716
a761485716 回复qq_21588811: 手牌中相同牌的数量
21 天之前 回复
qq_21588811
qq_21588811 是最多相同的牌数还是每张牌相同的数量
21 天之前 回复
zhichouchan0056
zhichouchan0056 回复a761485716: 是最多相同的牌数还是每张牌相同的数量
21 天之前 回复
a761485716
a761485716 我只想知道记录手中相同牌数的代码和用random随机洗牌的代码。 最好是在这个加上去......但如果可以的话拜托了! 困扰很久了
21 天之前 回复
qq_35213062
qq_35213062   2018.01.03 13:56

不晓得 一点都不知道

qq_35213062
qq_35213062   2018.01.03 13:56

真的一点都不懂 懂了就好了

IT_choshim
IT_choshim   2018.01.03 22:48

最简单的方法:对15张牌分别定义一个变量用来记录手中每张相同大小牌的个数。
for(I=0;l<=pai.length;l++){
if (pai [0]==0){0对应变量++}
...
}
通过这样完成对相同大小的牌的数量进行计数。

qq_35213062
qq_35213062   2018.01.04 16:09

最简单的方法:对15张牌分别定义一个变量用来记录手中每张相同大小牌的个数。
for(I=0;l<=pai.length;l++){
if (pai [0]==0){0对应变量++}
...
}
通过这样完成对相同大小的牌的数量进行计数。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!