黑马程序员技术交流社区

标题: JAVA技术贴 [打印本页]

作者: 木木贤津    时间: 2018-11-14 20:41
标题: JAVA技术贴
经过老师详细的讲解和多天的学习,让我已经开始有点小入门。以后的路还很长,希望可以越走越远。以下是我通过学习能自己编写的一些小代码,不喜勿喷:
1. 斗地主发牌机制:
public static void main(String[] args) {
    ArrayList<String> list = new ArrayList<>();

    method(list, "黑桃");
    method(list, "方块");
    method(list, "梅花");
    method(list, "红桃");
    list.add("小王");
    list.add("大王");
//上面的代码主要就是调用方法把54张牌添加到集合中
    System.out.println(list);
    System.out.println("===========");
// 调用三次随机发牌机制,就会有三个集合出来,各是17张牌,之后大集合只剩余3张牌。
    method(list);
    method(list);
    method(list);
    System.out.println(list);

}

//该方法主要把一副牌除了大小王 可以一次添加到 集合当中
public static void method(ArrayList<String> list, String str) {
    for (int i = 1; i <= 13; i++) {
        list.add(str + i);     
    }
}
// 该方法主要是把一个大集合当中的牌 随机发出17张放到新的集合当中,每发出1张,大集合会移除发出的牌
public static void method(ArrayList<String> list) {
    ArrayList<String> listA = new ArrayList<>();
    Random r = new Random();
    for (int i = 0; i < 17; i++) {
        int num = r.nextInt(list.size());
        listA.add(list.get(num));
        list.remove(num);
    }
    System.out.println(listA);
}
2. 发红包随机的方法
// 传入的参数:  多少钱,多少份
public ArrayList<Integer> divide(final int totalMoney, final int totalCount) {
    ArrayList<Integer> list = new ArrayList<>();
    Random r = new Random();
    int leftMoney = totalMoney;
    int leftCount = totalCount;
// 来一个循环,循环次数比份数少1,因为最后一个人抢的就是剩余的钱
    for (int i = 0; i < totalCount - 1; i++) {
//1 + random.nextInt(leftMoney / leftCount * 2)  就是抢红包的范围公式
        int money = r.nextInt(leftMoney / leftCount * 2) + 1;
        list.add(money);
        leftMoney -= money;
        leftCount--;
    }
    list.add(leftMoney);
    return list;
}
通过这个抢红包范围的公式,知道了抢红包第一个抢比较吃亏,当然,最主要的还是看RP






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2