码农小屋 码农小屋
  • 首页
  • 文章
    • Python
    • 计算机基础
    • C语言
    • Java
    • 数据库
    • Linux
  • 资源
  • 随笔
  • 优秀软件
  • 24h新鲜事
  • 专题
  • 留言板
  • 注册 登录
立即登录
0文章
0评论
0获赞
  • 首页
  • 博客中心
    • 文章
    • 资源
  • 随笔
  • 优秀软件
  • 24h新鲜事
  • 专题
  • 留言板
主页 › 文章 › Java › Java编程,模拟抢红包程序
#Java#

Java编程,模拟抢红包程序

4月前
235 0 2

程序概述

微信中的红包有多种,如普通红包(发给个人)、群红包(同时发送给多人),请使用面向对象思想实现微信红包功能。

具体要求

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编程,模拟抢红包程序-码农小屋
Java编程,模拟抢红包程序-码农小屋

写在最后

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

2
Mr Gu
相关文章
如果在try里面执行return,那么还会不会执行finally?
简述Java的三大特性——继承、封装、多态
Java方法的重载和重写
Java笔记,Java的前世今生
评论 (0)
再想想
Mr Gu管理员
Better late than never.
45文章 1评论 51获赞
文章推荐
ZIP Pro 3 – 文件压缩分享加密管理套件
2月前
Uninstall Tool-专业的软件卸载工具
3月前
Speccy:优秀的硬件检测工具
4月前
CleanMyPC-专为 Windows打造的清理工具
4月前
Internet Downloader Manager-一款专业的Win下载工具
4月前
Wise Care 365-Windows 系统清理和加速工具
4月前
新鲜事
新Mac太牛:在电脑上运行iPhone、iPad的软件、游戏
2月前
自从苹果M1芯片发布之后,使用这颗芯片的Mac电脑,就被大家认为是有史以来最强的Mac,因为这颗小米的芯片,在性能上已经打败了苹果使用的最高端的i9芯 ...[阅读全文]
苹果发布会总结:一个芯片,三款产品!苹果这把棋下得可真深
2月前
北京时间11月11日凌晨2点,苹果在圣何塞召开了本年度最后一场发布会。在这次发布会上,苹果推出了基于ARM架构的全新M1自研处理器。 ...[阅读全文]
荣耀命运落定:救了自己,也救华为
2月前
华为出售荣耀一事终于落槌。 ...[阅读全文]
发布会停不下来,苹果下月发布新Mac
3月前
今年的苹果有些与众不同,往年只开一次秋季发布会,今年在九月十月连开两场。 ...[阅读全文]
iPhone 12 开启 5G 续航锐减,苹果回应
3月前
对于今年的 iPhone 12 来说,除了回归直角边框设计之外,最大的亮点就是 5G 了。 ...[阅读全文]
华为Mate40正式发布
3月前
定位高端旗舰的华为Mate40系列共发布四款新机:华为Mate40(6.5英寸)、华为Mate40 Pro(6.76英寸)、华为Mate40 Pro+ ...[阅读全文]
更多
  • 专题
  • 文章
  • 友情链接
  • 留言板
Copyright © 2020-2021 码农小屋. 苏ICP备20033168号