java 实现控制台实现发红包 2020-08-27

1.红包类

public abstract class HongBao {

//属性:

    //定义红包数量:

    int HBcount;

    //定义红包金额

    double HBmoney;

    //定义构造器

    public HongBao(int HBcount, double HBmoney) {

this.HBcount = HBcount;

        this.HBmoney = HBmoney;

    }

//方法:

    public  abstract ListsendRedEnvelops();

}


2.抢红包人的一个类

public class Person{

//属性:

    //微信名:

    Stringname;

    //抢了多少钱:

    int shareMoney;

    //构造器

    public Person(String name) {

this.name = name;

    }

@Override

    public StringtoString() {

return name;

    }

}


3.继承父类实现抽象方法:

public class SpellLickRedEnvelopsextends HongBao {

//构造器

    public SpellLickRedEnvelops(int HBcount, double HBmoney) {

super(HBcount, HBmoney);

    }

//重写父类抽象方法

    @Override

    public ListsendRedEnvelops() {

//定义List集合,存放分好的红包

        List list =new ArrayList();

        /*

          红包如何进行分配

          比如:20 分5个红包:

          第一人:2.4

          第二人:7.8

          第三人:最低:0.01

                  最高:20-2.4-7.8

                  剩余的金额 - 剩余的人数*/

        //将红包金额从元变成分 1元 = 100分

        int samllmoney = (int) (super.HBmoney *100);

        //发红包的准备动作:

        //定义初始红包余额:

        int balance = samllmoney;

        //定义初始的红包剩余数量:

        int count =super.HBcount;

        //分红包:??每个红包分多少钱:

        for (int a =1; a <=super.HBcount; a++) {

//每一次循环就是一个红包:

            //当前这个红包分了多少钱:??最低:0.01【1  最高:  剩余的金额 - 剩余的人数】

            /*

            {1-5}随机数*/

            int amount =0;

            if (a !=super.HBcount) {//如果不是最后一个红包就随机抢

                Random r =new Random();//随机数

                amount = r.nextInt(balance - (super.HBcount - a));//[0,5) + 1 = [1,5]

            }else{//如果是最后一个红包就把剩余的都给了

                amount = balance;

            }

//将红包放入List集合中

            list.add(amount);

            //余额减掉:

            balance = balance - amount;

        }

return list;

    }

}


4.测试类

public class Demo {

//这是main方法,程序入口

    public static void main(String[] args) {

Scanner sc =new Scanner(System.in);

        System.out.print("请问你要发几个红包:");

        int count = sc.nextInt();

        System.out.print("请问你要发多少元:");

        int money = sc.nextInt();

        //选择一个微信群,在群中发红包,群众好友有谁?

        //定义一个集合,这个集合中就存放群中能抢红包的人:

        List list =new ArrayList();

        list.add(new Person("丽丽"));

        list.add(new Person("娜娜"));

        list.add(new Person("小明"));

        list.add(new Person("小红"));

        list.add(new Person("群主"));

        list.add(new Person("加红"));

        list.add(new Person("卫星"));

        list.add(new Person("阿斯顿"));

        //给这些人发红包

        SpellLickRedEnvelops s =new SpellLickRedEnvelops(count, money);

        //发红包

        List moneylist = s.sendRedEnvelops();

        //给随机的人发随机的红包:

        Random r =new Random();

        for (int a = moneylist.size(); a >0; a--) {

//随机的成员下标:

            int m = r.nextInt(list.size());

            //随机红包下标:

            int n = r.nextInt(moneylist.size());

            //通过成员的下标得到成员

            Person p = list.get(m);

            //通过红包的下标得到这个红包的金额

            p.shareMoney = moneylist.get(n);

            //已经抢过红包的人要从集合中移除

            list.remove(m);

            //已经分配的红包金额 从集合中移除m

            moneylist.remove(n);

            //打印抢红包信息:

            System.out.println(p.name +"抢到了" + p.shareMoney /100.00 +"元");

        }

//如果没有抢到红包就提示

        for (int a =0; a < list.size(); a++) {

System.out.println(list.get(a) +"手慢了,该换手了!");

        }

    }
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。