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(); } }