Java基础 第二节 第十三课

网友投稿 544 2022-05-29

继承的综合案例

综合案例

案例分析

案例实现

定义用户类

定义群主类

定义成员类

定义测试类

综合案例

群主法普通红包. 某群有多名成员, 群主给成员发普通红包. 普通红包规则:

群主的一笔金额, 从群主余额中扣除, 平均分成 n 等分, 让成员领取

成员领取红包后, 保存到成员金额中

请根据描述, 完成案例中所有类的定义以及指定类之间的继承关系, 并完成发红包的操作.

案例分析

根据描述分析, 得出如下继承体系:

案例实现

定义用户类

public class User { // 成员变量 private String username; // 用户名 private double leftMoney; // 余额 // 构造方法 // 无参构造 public User(){ } public User(String username, double leftMoney){ this.username = username; this.leftMoney = leftMoney; } // get/set方法 public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public double getLeftMoney() { return leftMoney; } public void setLeftMoney(double leftMoney) { this.leftMoney = leftMoney; } // 展示信息的方法 public void show(){ System.out.println("用户名: " + username + ", 余额为: " + leftMoney + "元"); } }

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

定义群主类

import java.util.ArrayList; public class Admin extends User { // 构造方法 // 无参构造 public Admin(){ } // 有参构造 public Admin(String username, double leftMoney){ // 通过super调用父类构造方法 super(username, leftMoney); } public ArrayList send(int money, int count){ // 获取群主余额 double leftMoney = getLeftMoney(); if (money > leftMoney){ return null; } // 修改群主余额 setLeftMoney(leftMoney - money); // 创建一个集合, 保存等分金额 ArrayList arrayList = new ArrayList<>(); // 扩大100倍, 相当于拆算成 "分" 为单位, 避免小数运算损失精度的问题 money = money * 100; // 每份的金额 int serving = money / count; // 不能被整除的余数 int leftover = money % count; // 无论是否整除, n-1份, 都是每份的等额金额 for (int i = 0; i < count - 1; i++) { // 缩小100倍吗折算成 "元" arrayList.add(serving / 100.00); } // 最后一份金额 arrayList.add((serving + leftover) / 100.00); // 返回集合 return arrayList; } }

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

定义成员类

import java.util.ArrayList; import java.util.Random; public class Member extends User { public Member() { } public Member(String username, double leftMoney) { super(username, leftMoney); } // 打开红包, 就是从集合中, 随机取出一份, 保存到自己的余额中 public void openRedPackage(ArrayList arrayList){ // 创建Random对象 Random r = new Random(); // 随机生成一个角标 int index = r.nextInt(arrayList.size()); // 移除一个金额 Double money = arrayList.remove(index); // 直接调用父类方法,设置到余额 setLeftMoney(money); } }

1

2

3

4

5

6

Java基础 第二节 第十三课

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

定义测试类

import java.util.ArrayList; import java.util.Scanner; public class Test { public static void main(String[] args) { // 创建一个群主对象 Admin admin = new Admin("群主",200); // 创建一个键盘录入 Scanner sc = new Scanner(System.in); System.out.println("请输入金额:"); int money = sc.nextInt(); System.out.println("请输入个数:"); int count = sc.nextInt(); // 发送红包 ArrayList sendList = admin.send(money,count); // 判断,如果余额不足 if(sendList == null){ System.out.println(" 余额不足..."); return; } // 创建三个成员 Member m1 = new Member(); Member m2 = new Member(); Member m3 = new Member(); // 打开红包 m1.openRedPackage(sendList); m2.openRedPackage(sendList); m3.openRedPackage(sendList); // 退还余额 double left = 0; for (Double aDouble : sendList) { left += aDouble; } admin.setLeftMoney(admin.getLeftMoney() + left); // 展示信息 admin.show(); m1.show(); m2.show(); m3.show(); } }

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

Java

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Redis数据类型之Hash哈希类型
下一篇:命令行操作Java程序的那些事~
相关文章