有没有大佬帮我看看,我这个斗地主,为什么不自动整理牌???

ぃ坠花湮゛ 2021-02-25 09:00:11
package sdjgad;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ddz {
public static void main(String[] args) {
//创建集合
Map<Integer, String> pokers = new HashMap<>();
List<Integer> list = new ArrayList();
String[] huase = {"梅花", "黑桃", "红桃", "方片"};
String[] shuzi = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2",};
int num = 0;
for (String str : huase) {
for (String ste : shuzi) {
String poke = str + ste;
pokers.put(num, poke);
list.add(num);
num++;
}

}
pokers.put(num, "大王");
list.add(num++);
pokers.put(num, "小王");
list.add(num);
System.out.println("全部派:"+pokers);
System.out.println("索引:"+list);
//发牌
Collections.shuffle(list);
List<Integer> xiaohua = new ArrayList<>();
List<Integer> xiaohei = new ArrayList<>();
List<Integer> xiaowang = new ArrayList<>();
List<Integer> dipai = new ArrayList<>();
System.out.println("洗过的牌:"+list);
for (int i =0; i < list.size();i++){

Integer pokeNUM=list.get(i);
if (i>=list.size()-3){
dipai.add(pokeNUM);
}else if (i%3==0){
xiaohua.add(pokeNUM);
}else if (i%3==1){
xiaohei.add(pokeNUM);
}else if (i%3==2){
xiaowang.add(pokeNUM);
}
}
System.out.println("小花:"+ kanpoker(xiaohua,pokers));
System.out.println("小黑:"+xiaohei);
System.out.println("小王:"+xiaowang);
System.out.println("底牌:"+dipai);
}

private static String kanpoker(List <Integer>nums , Map<Integer,String>pokers){

Collections.sort(nums); //按顺序整理牌

StringBuilder sb= new StringBuilder();
for (Integer num :nums){
String poker= pokers.get(num);
sb.append(poker);
}
String str = sb.toString();
return str.trim();


}


}






...全文
233 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
android_cai_niao 2021-04-23
  • 打赏
  • 举报
回复
是斗地主发牌吗?面向对象,写个Poke类表示扑克,这样实现起来比较简单,如下:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.TreeSet;

public class Test {

    public static class Poke implements Comparable<Poke> {
        public static int sIndex;
        public Integer index;
        public String color;
        public Poke(String color) {
            this.color = color;
            this.index = sIndex++;
        }
        @Override
        public String toString() { return color; }
        @Override
        public int compareTo(Poke o) { return index.compareTo(o.index); }
    }

    public static void main(String[] args) {
        var pokes = new ArrayList<Poke>();
        pokes.add(new Poke("大王"));
        pokes.add(new Poke("小王"));
        var colors = Arrays.asList("黑桃","红桃","梅花","方片");
        var numbers = Arrays.asList("2","A","K","Q","J","10","9","8","7","6","5","4","3");
        numbers.forEach(number -> colors.forEach(color -> pokes.add(new Poke(color + number))));
        Collections.shuffle(pokes); // 洗牌
        var xm = new TreeSet<Poke>();
        var xh = new TreeSet<Poke>();
        var xq = new TreeSet<Poke>();
        while (!pokes.isEmpty()) {
            xm.add(pokes.remove(0)); // 发牌
            xh.add(pokes.remove(0)); // 发牌
            xq.add(pokes.remove(0)); // 发牌
        }
        System.out.println("小明:" + xm);
        System.out.println("小红:" + xh);
        System.out.println("小强:" + xq);
    }

}
运行效果如下:

小明:[黑桃2, 梅花2, 方片2, 红桃A, 梅花A, 方片A, 红桃K, 方片K, 黑桃Q, 梅花Q, 梅花J, 黑桃10, 红桃10, 梅花10, 黑桃9, 梅花8, 方片6, 梅花4]
小红:[黑桃A, 红桃J, 方片J, 方片10, 红桃9, 方片8, 黑桃7, 梅花7, 方片7, 红桃6, 梅花6, 黑桃5, 梅花5, 方片4, 黑桃3, 红桃3, 梅花3, 方片3]
小强:[大王, 小王, 红桃2, 黑桃K, 梅花K, 红桃Q, 方片Q, 黑桃J, 梅花9, 方片9, 黑桃8, 红桃8, 红桃7, 黑桃6, 红桃5, 方片5, 黑桃4, 红桃4]
qq_34165866 2021-04-20
  • 打赏
  • 举报
回复
排序没有问题,是你用嵌套循环生成排序的时候放反了。你把shuzi 套在 huase 里边,所以排序的规则变成了先排完所有同一huase的牌,再排序所有shuzi的牌。 调换一下嵌套循环就可以了。
for (String ste : shuzi) {
            for (String str : huase) {
                String poke = ste + str;
                pokers.put(num, poke);
                list.add(num);
                num++;
            }

        }
廾匸随笔 2021-04-20
  • 打赏
  • 举报
回复
我将代码整理优化了一下,你可以看看:https://www.cnblogs.com/li-chuan/articles/14681412.html
paullbm 2021-02-26
  • 打赏
  • 举报
回复

package sdjgad;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ddz {
    public static void main(String[] args) {
        //创建集合
        Map<Integer, String> pokers = new HashMap<>();
        List<Integer> list = new ArrayList();
        String[] huase = {"梅花", "黑桃", "红桃", "方片"};
        String[] shuzi = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2",};
        int num = 0;
        for (String str : huase) {
            for (String ste : shuzi) {
                String poke = str + ste;
                pokers.put(num, poke);
                list.add(num);
                num++;
            }

        }
        pokers.put(num, "大王");
        list.add(num++);
        pokers.put(num, "小王");
        list.add(num);
        System.out.println("全部派:"+pokers);
        System.out.println("索引:"+list);
//发牌
        Collections.shuffle(list);
        List<Integer> xiaohua = new ArrayList<>();
        List<Integer> xiaohei = new ArrayList<>();
        List<Integer> xiaowang  = new ArrayList<>();
        List<Integer> dipai = new ArrayList<>();
        System.out.println("洗过的牌:"+list);
        for (int i =0; i < list.size();i++){

            Integer pokeNUM=list.get(i);
            if (i>=list.size()-3){
                dipai.add(pokeNUM);
            }else if (i%3==0){
                xiaohua.add(pokeNUM);
            }else if (i%3==1){
                xiaohei.add(pokeNUM);
            }else if (i%3==2){
                xiaowang.add(pokeNUM);
            }
        }
	
		System.out.println("小花:"+ kanpoker(xiaohua,pokers));
		System.out.println("小黑:"+ kanpoker(xiaohei,pokers));
        System.out.println("小王: "+kanpoker(xiaowang,pokers));
        System.out.println("底牌:"+kanpoker(dipai,pokers));
		
        }

        private static String kanpoker(List <Integer>nums , Map<Integer,String>pokers){
			Collections.sort(nums); //按顺序整理牌
			StringBuilder sb= new StringBuilder();
			for (Integer num :nums){
			   String poker= pokers.get(num);
			   sb.append(poker+" ");
				}
			String str = sb.toString();
			return str.trim();
		}

}
paullbm 2021-02-26
  • 打赏
  • 举报
回复
引用 2 楼 ぃ坠花湮゛ 的回复:
System.out.println("小花:"+ kanpoker(xiaohua,pokers)); System.out.println("小黑:"+kanpoker(xiaohei,pokers)); System.out.println("小王:"+kanpoker(xiaowang,pokers)); System.out.println("底牌:"+kanpoker(dipai,pokers)); 正确之后 还是不能正确排序
你写的一些符号有中文符号!
起名伤脑 2021-02-26
  • 打赏
  • 举报
回复
sort直接排序是有问题的,你的"10", "J", "Q", "K", "A"排出来的顺序肯定是不对的
ぃ坠花湮゛ 2021-02-25
  • 打赏
  • 举报
回复
System.out.println("小花:"+ kanpoker(xiaohua,pokers)); System.out.println("小黑:"+kanpoker(xiaohei,pokers)); System.out.println("小王:"+kanpoker(xiaowang,pokers)); System.out.println("底牌:"+kanpoker(dipai,pokers)); 正确之后 还是不能正确排序
  • 打赏
  • 举报
回复
仔细检查你的看牌方法

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧