封装一个微信用包类,主要的功能有|:
红包中存有钱,多少个人分;每个分到的钱数,及获收红包的时间;
主要的功能有
打开红包;(如果打开红包的人数没有达到上限,则可以打开,并随机获得金额)
查看红包分配信息;
设置截止日期;(如果超过最大金额,则再打时提示过期)
思路:微信红包类应该具有的属性有红包金额,红包数,过期时间,领红包的人,时间等。
难点在于:将红包如何分成几份,等可能的被其他人抢到,而且不会出现为0的红包。
首先运用取随机数的类,每次取当前所剩金额的随机数,然后将这些分好的红包放到数组中的,随机打乱顺序,这样取得时候就是等可能性,每个人取得时候顺序获得数组中的红包。代码实现如下:
1 package zuoye; 2 import java.text.SimpleDateFormat; 3 import java.util.*; 4 public class zuoye_3 { 5 6 public static void main(String[] args) { 7 Scanner sc=new Scanner(System.in); 8 Date t=new Date(); //时间类,设定红包过期的时间 9 Calendar c=Calendar.getInstance(); 10 c.setTime(t); 11 c.add(Calendar.HOUR, 2); //2小时后过期 12 System.out.println("请输入红包金额:"); 13 double n=sc.nextInt(); 14 System.out.println("请输入红包的数量:"); 15 int x=sc.nextInt(); 16 Money hong=new Money(n,c.getTime(),x); //传递参数,红包金额,红包数,时间 17 //sc.next(); 18 System.out.println("请输入抢红包的人的名字:"); 19 for(int i=0;i<x;i++) 20 { people ob1=new people(sc.next()); //创建几个人进行抢 21 Date t1=new Date(); 22 hong.qiang(ob1,t1); 23 } 24 hong.show(); 25 } 26 27 } 28 class Money{ 29 private double money; //红包金额 30 private Date time; //到期时间 31 private int size; //红包数 32 private int num; //第几个人在抢 33 private double nowmoney; //红包剩余金额 34 ArrayList<Double> str=new ArrayList<Double>(); //红包被分为存取随机金额 35 ArrayList<people> p=new ArrayList<people>(); //抢红包的人 36 public Money(double money, Date time, int size) { 37 super(); 38 this.money = money; 39 this.time = time; 40 this.size = size; 41 nowmoney=money; 42 yao(); 43 } 44 /* 45 * 将红包分为随机金额存到数组中,并处理如果金额为0时的情况,最后打乱顺序 46 */ 47 private void yao() 48 { double m=nowmoney; 49 for(int i=1;i<=size;i++) 50 { 51 if(i==size) 52 {str.add(m); 53 m=0; 54 } 55 else 56 { 57 Random r=new Random(); 58 double x=0; 59 if(m!=0) 60 x=r.nextDouble()*m; 61 m-=x; 62 str.add(x); 63 } 64 } 65 Collections.sort(str); 66 for(int i=0;i<str.size();i++) 67 { 68 if(str.get(i)<0.005) 69 { 70 double x=str.get(size-1)*0.01; 71 str.set(i,x+str.get(i)); 72 str.set(size-1,str.get(size-1)-x); 73 } 74 else 75 { 76 break; 77 } 78 } 79 Collections.shuffle(str); 80 } 81 /* 82 * 抢红包操作,参数为人和时间 83 */ 84 void qiang(people ob,Date t){ 85 num++; 86 if(num>size) 87 { 88 System.out.println("红包已经抢完了"); 89 return ; 90 } 91 if(t.after(time)) 92 { 93 System.out.println("红包已经过期了"); 94 return ; 95 } 96 ob.money=str.get(num-1); 97 ob.time=t; 98 nowmoney-=ob.money; 99 p.add(ob); 100 if(num==size) 101 nowmoney=0; 102 } 103 /* 104 * 显示当前红包情况,被谁抢,什么时候,剩余多少 105 */ 106 void show() 107 { 108 Collections.sort(p); 109 System.out.print("红包共"+this.money+"元,已有"+p.size()+"人抢,现在剩余"); 110 System.out.printf("%.2f\n",this.nowmoney); 111 SimpleDateFormat c=new SimpleDateFormat("h:mm:ss"); //设定日期的输出格式 112 for(int i=0;i<p.size();i++) 113 { 114 System.out.print(p.get(i).name+"抢到"); 115 System.out.printf("%.2f",p.get(i).money); 116 System.out.println(" 时间"+c.format(p.get(i).time)); 117 } 118 } 119 } 120 class people implements Comparable<people>{ 121 String name; 122 double money; 123 Date time; 124 public people(String name) { 125 super(); 126 this.name = name; 127 } 128 @Override 129 public int compareTo(people o) { 130 131 return (int)(o.money-this.money); 132 } 133 134 }