黑马程序员技术交流社区

标题: 基础班学习之发红包案例-2 [打印本页]

作者: yeeo000    时间: 2018-6-12 14:50
标题: 基础班学习之发红包案例-2
哈哈,我来发续集了。
接上次分析中需要实现的发红包案例的具体代码。
1、定义父类:(其实就是个标准的JavaBean)
public class Users {
    public Users(String name, int leftMoney) {
        this.name = name;
        this.leftMoney = leftMoney; }
    public Users() { }
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public int getLeftMoney() { return leftMoney; }
    public void setLeftMoney(int leftMoney) { this.leftMoney = leftMoney; }
    private String name;
    private int leftMoney;
    public void show(){
        System.out.println("用户名:"+name+"账户余额为:"+leftMoney); }}
2、子类Boss,继承父类并有发红包的方法
import java.util.ArrayList;
public class Boss extends Users{
    public Boss() { }
    public Boss(String name, int leftMoney) {
        super(name, leftMoney);}
    public  ArrayList<Integer> send(int money ,int count){
        int money1 = super.getLeftMoney();//super调用父类的方法
        ArrayList<Integer> list = new ArrayList<>();
        if (money1<money){
            System.out.println("余额不足");
        }
            super.setLeftMoney((super.getLeftMoney()-money));//群主剩下的钱
            int x = money/ count;//每份的钱;
            int y = money% count+x;//取余,如钱不能按整数均分,单独多的那个红包的金额。
            for (int i= 0;i<count-1;i++){
                list.add(x);}//count-1个红包的金额是x
                list.add(y);//有一个红包的金额是y
            return list; }}
3、子类Member,继承Users并有收红包的方法
import java.util.ArrayList;
import java.util.Random;
public class Member extends Users {
    public Member() {
    }
    public Member(String name, int leftMoney) {
        super(name, leftMoney);
    }
    public void get(ArrayList<Integer> list){
        //因为可能会有一个红包金额不一样,所以这里用一个随机
        Random r = new Random();
        int i = r.nextInt(list.size());//bound刚好为0-(size-1),和索引一致
        //因为红包每拿走一个需要少掉一个,故用remove;
        int j = list.remove(i);
        //抢到红包后的钱
        int money = super.getLeftMoney()+j;
        //将当前余额返回到对象中
        super.setLeftMoney(money);
    }
4、测试类,有main方法,用于新建对象,并且测试功能是否满足
import java.util.ArrayList;
import java.util.Scanner;
public class Test {
    public static void main(String[] args) {
        Boss boss = new Boss("刘备",1000);
        Member one = new Member("关羽",10);
        Member two = new Member("张飞",20);
        Member three = new Member("赵云",100);
        boss.show();one.show();two.show();three.show();
        Scanner s = new Scanner(System.in);
        System.out.println("请输入红包总额:");
        int money = s.nextInt();
        System.out.println("请输入红包个数:");
        int count = s.nextInt();
        ArrayList<Integer> list = new ArrayList<>();
        list=boss.send(money,count);
        boss.show();
        one.get(list);two.get(list);three.get(list);
        one.show();two.show();three.show();
}
}
5、大功告成,运行程序:
我是刘备,我有1000元钱
我是关羽,我有10元钱
我是张飞,我有20元钱
我是赵云,我有100元钱
请输入红包总额://此处输入500
请输入红包个数://此处输入3
我是刘备,我有500元钱//1000-50
我是关羽,我有176元钱//抢到176-10=166
我是张飞,我有188元钱//抢到188-20=168,抢到了多的那个红包
我是赵云,我有266元钱//抢到266-100=166
6、思考,哈,这个简单的抢红包就完成了。
但是感觉还是有很多实际的内容可以完善,比如:
a、成员数量以及余额,应该也可以通过Scanner进行输入,另外调整发红包的数量等于成员数量等;
b、不等额的随机红包的实现,这个应该就更难了,需要得到一组总额固定的随机数。
c、群主应该也可以抢红包...
哈哈,水的差不多了,现在的我基础班还没上完课程呢,等以后学的多了,应该就可以实现比较复杂的功能。通过码代码实现一个个功能还是挺有成就感的。不过,可能是因为没遇到那些复杂到抓头发的吧,哈哈。Bye~~






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