java写的伪微信红包功能示例代码

  • 时间:
  • 浏览:37

机能劣化面:

1.利用int没有利用double。(单元用分不消元)也省来了借要用math.round4舍5进,把double范例数据只留小数面后前两位。

2.random() 办法用于前往1个随机数,随机数范畴为 0.0 =< Math.random < 1.0。以是,当每人只能分到1分钱时,不消死成随机数(随机数只能死成0分,没有年夜于最小值,会逝世轮回)。

import java.util.HashMap;
import java.util.Map;

public class WXTRedPackage {
  public static void main(String[] args) {
    WXTRedPackage wx = new WXTRedPackage();
    // 白包钱数(以分为单元),个数
    wx.WXMoney(1000, 50);
  }

  public void WXMoney(int sum, int num) {
    // 创立1个hashmap,把分派出去的人战钱挨次挨治
    Map moneyMap = new HashMap();
    System.out.println("总计" + sum / 100 + "元白包,分红" + num + "份。起头:");
    int min = 0;
    int balance = sum;
    int money = 0;
    for (int i = 0; i < num; i++) {
      if ((double) sum / num == 1) {
        moneyMap.put(i, 1);
      } else {
        // 最年夜可分派数量为剩下的人每人最少1分钱
        int max = balance - (num - i - 1) * 1;
        // 获得1个0-最年夜可分派数的随机数
        money = (int) (Math.random() * max);
        // 最初1小我齐分派最初的余额
        if (i == num - 1) {
          moneyMap.put(i, balance);
          break;
        } else {
          // 分派的金额要超越0份,小于最年夜可分派数,没有契合请求则把人数加1从头轮回1次
          if (money > min && money < max) {
            balance -= money;
            moneyMap.put(i, money);
          } else {
            i = i - 1;
          }
        }
      }
    }
    for (Integer key : moneyMap.keySet()) {
      System.out.println("第" + (key + 1) + "人获得白包"
          + (double) moneyMap.get(key) / 100 + "元!");
    }
  }
}

以上便是本文的全数内容,期望对各人的进修有所帮忙,也期望各人多多撑持剧本之家。