javaSE 基础案例--发红包(代码操作版有解析分析)

javaSE 基础案例–发红包(代码操作版有解析分析)


  • 分析

    发红包需要,一个发红包的人(Boss类),需要一个抢红包的人(Person类),需要一个将上面两个类重复的代码放在一起的类(user),最后需要一个测试类。

  • User类—建议直接看Boss类和Person类后再来看User类

  • package 发红包练习;
    
    /*
            用户类,需要姓名和余额
            需要查看用户的姓名和余额的方法
    
     */
    public class User {
        private String name ;
        private int money;
    
    
        //方法
    
        public User() {
        }
    
        public User(String name, int money) {
            this.name = name;
            this.money = money;
        }
    
        public void look() {
            System.out.println("姓名:"+ name);
            System.out.println("余额:"+ money);
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getMoney() {
            return money;
        }
    
        public void setMoney(int money) {
            this.money = money;
        }
    }
    
    
  • Boss类— 实现发红包的功能

    package 发红包练习;
    
    import java.util.ArrayList;
    
    /*
            boss类--   需要有发红包的功能,固然需要一个发红包的方法
            需要发红包,然后将红包分成n分 --参数为 发多少钱 和 分多少份
            希望能再测试类把余额传入到这里,然后发红包时判断是否够钱发红包 --  要怎么传呢?参数?感觉继承类会比较方便
            而且我创建对象的时候,需要有姓名和余额,这个时候继承,就省去了添加新属性的步骤
            1-创建个方法,返回值为集合,因为集合存放数据,哪些数据被拿了,和要拿哪个数据会很方便;
            2-创建完方法,参数传进来后,我需要判断,判断我的余额够不够我发红包
    
     */
    public class Boss extends User{
        public Boss(String name, int money) {
            super(name, money);
        }
        public ArrayList<Integer> radmoney(int totamoney, int count) {
            //现在创建一个集合来放红包,并且将红包返回出去
            ArrayList<Integer> list = new ArrayList<>(); //----因为如果余额不足,需要返回一个空集合出去,所以集合创建需要再if前面
            if (totamoney > super.getMoney()) {
                System.out.println("余额不足");
                return list;
            }
            //这里不用else,因为如果余额不足的话下面的的都不需要执行,所以if里面需要return
            int o = super.getMoney();
            super.setMoney(o-totamoney);
    
            int a = totamoney/count; //将红包分成count份
            int b = totamoney%count;// 如果红包除不尽,将多出来的钱放到最后一位去
            //现在需要一个for循环将红包放入集合中。
            for (int i = 0; i < count; i++) {
                if (i==count-1) {
                    list.add(a+b) ;
                }else list.add(a);
            }
            return list;
        }
    
    }
    
    
  • Person类–实现抢红包功能

    package 发红包练习;
    
    import java.util.ArrayList;
    import java.util.Random;
    
    /*
                    需要收红包,并且将红包存入自己的账号,也就是余额当中
                    1-和boss一样,创建出对象的时候需要构造器,所以继承User类
                    2-创建一个收红包的方法,参数需要接收红包的类型,不然你参数都传不进来就不用说抢了,红包打都打不开
                    3-方法类型,不需要方法类型,因为不需要返回出去什么,只需要把接收的红包放进去余额即可
                    4-红包传进来之后我需要抢,红包放在了集合里,集合是可以索引的,抢的步骤实际上就是,随机生成一个索引值
                    5-生成完索引需要将这个数据拿出来,并且删除,刚好remove就是将数据删除并且把删除的数据传回来的
             */
    public class Person extends User{
        public Person(String name, int money) {
            super(name, money);
        }
        public void remoney(ArrayList<Integer> list) {
            int c = new Random().nextInt(list.size());//需要注意的是生成的范围是[0,list.size);---生成的索引值
            int d = list.remove(c) ; //将这个数据拿出来,并且删除。因为可以返回原数据,所以我用d来接收。
            int money = super.getMoney();
            super.setMoney(money+d);
        }
    }
    
    
  • app测试类 ------所有操作都在此实现

    package 发红包练习;
    
    import java.util.ArrayList;
    
    /*
            测试类
     */
    public class app {
        public static void main(String[] args) {
            //首先创建群主和成员
            Boss boss = new Boss("小明白",9999999);
            Person p1 = new Person("小明",0);
            Person p2 = new Person("小明",0);
            Person p3 = new Person("小明",0);
            Person p4 = new Person("小明",0);
            //创建完之后我们可以查看一下各自的余额
            boss.look(); //9999999
            p1.look();//这里包括下面都是    0
            p2.look();
            p3.look();
            p4.look();
            //现在boss发红包
            //因为boss发红包的方法有返回值,这里用radmoney来接收
            ArrayList<Integer> radmoney = boss.radmoney(99, 4);//这里发99元分4个\
            //他们抢红包
            p1.remoney(radmoney);
            p2.remoney(radmoney);
            p3.remoney(radmoney);
            p4.remoney(radmoney);
            //现在查看抢完红包有多少钱
            System.out.println("========================");
            boss.look(); //9999900
            p1.look();//这里包括下面都是24,其中有一个是多出来的,随机谁都有可能得到,大小为27
            p2.look();
            p3.look();
            p4.look();
        }
    }
    
    

    image-20220120162340013

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值