程序概述
微信中的红包有多种,如普通红包(发给个人)、群红包(同时发送给多人),请使用面向对象思想实现微信红包功能。
具体要求
1. 创建一个普通红包类,拥有一个“金额”属性及一个“点击”方法(模拟人工点击红包过程),可适当增加其他成员变量及方法,实例化红包对象时使用构造方法对其初始化,金额自拟(单位为元,精确到0.01),红包对象被调用“点击”方法后,输出“恭喜你抢到**元红包。”;当前红包再次被“点击”时打印“你已经领过该红包了。”。
2. 创建一个群红包类(红包金额随机分配),继承自普通红包类,其有红包“数量”及“金额”两个属性,触发“点击”方法后,打印类似“恭喜你抢到**元红包”,当红包被抢完后,再次触发“点击”方法时则打印“你来晚了,红包已经抢完啦”。群红包金额要随机生成,不能为0,比如红包金额为10,个数为3,则第三次“点击”红包时能够抢到红包,此时红包被瓜分完毕,第四触次“点击”红包时,显示“你来晚了,红包已经抢完啦”。
思路分析
对于整个系统来说,很好的诠释了面向对象的思想。对于普通红包来说,应该是比较简单的,这里不多做分析,稍后直接上代码。但是对于群红包来说,需要注意两个点。第一,由于钱的最小单位为分,即0.01元,值得注意的是,若红包金额正好能使每个人分得0.01元,那么就不需要产生随机金额。第二,就是要注意规避产生领到的红包金额为0元的情况。个人认为唯一一个难点就是如何随机生成红包金额。
具体代码
import java.util.Scanner;
import java.text.DecimalFormat;
import java.util.Random;
public class demo{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
while(true){
System.out.println("1.普通红包模式");
System.out.println("2.群红包模式");
System.out.println("3.输入其他则退出");
int n=sc.nextInt();
if(n==1){
CommonRedBag RedBag1=new CommonRedBag();
System.out.println("请输入红包金额:");
RedBag1.setMoney(sc.nextFloat());
System.out.println("输入1抢红包,其他则返回:");
RedBag1.Click();
}
else if(n==2){
GroupRedBag RedBag2=new GroupRedBag();
System.out.println("请输入红包金额:");
RedBag2.setMoney(sc.nextFloat());
System.out.println("请输入人数:");
RedBag2.setPeople(sc.nextInt());
System.out.println("输入1抢红包,其他则返回:");
RedBag2.Click();
}
else
return;
}
}
}
//普通红包
class CommonRedBag{
protected float money;
public void setMoney(float money) {
this.money = money;
}
public void Click(){
Scanner sc=new Scanner(System.in);
int sum=0;
while(true){
int i=sc.nextInt();
if(i==1){
if(sum<1){
System.out.println("恭喜您已经领到"+money+"元");
sum++;
}
else
System.out.println("您已经领过红包了!");
}
else
return;
}
}
}
//群红包
class GroupRedBag extends CommonRedBag{
private int people;
public void setPeople(int people) {
this.people = people;
}
public void Click(){
Scanner sc=new Scanner(System.in);
Random r = new Random();
int sum=0;
float s;
int b;
if(people==(int)(money*100)){
while(true){
int i=sc.nextInt();
if(i==1){
if(sum<people){
System.out.println("恭喜您领到0.01元");
sum++;
}
else
System.out.println("您来晚了,没有抢到哦!");
}
else
return;
}
}
else{
while(true){
int i=sc.nextInt();
if(i==1){
//判断是否为最后一个人
if(sum<people-1){
//随机生成红包金额
b=r.nextInt((int)(money*100)-1);
s=(float)(b+1)/100;
money-=s;
System.out.println("恭喜您领到"+s+"元");
sum++;
}
else if(sum==people-1){
DecimalFormat df=new DecimalFormat("##0.00");
//格式化金额
String Money = df.format(money);
System.out.println("恭喜您领到"+Money+"元");
sum++;
}
else
System.out.println("您来晚了,没有抢到哦!");
}
else
return;
}
}
}
}
运行结果


写在最后
对于这个程序来说,跟人认为,逻辑思路并不是很复杂,也没有用到很生僻的知识,但是,这个程序很好地解释了面向对象的思想,也诠释了类和对象之间的关系,即对象是类的实例化。此外,方法的重写,子类与父类之间的关系等等。对于刚学Java的新手来说,是一道很不错的练习题。