Java模拟微信发红包

作者说:

这个实验运用到了Random类的生成随机数的知识、String类的format方法保留两位小数、灵活运用类型转换。

这次注释写的很详细,因为我做这个实验的时候花了很长时间,我第一次用的方法不太行,是参考课本上P214~P215的方法,但是那方法,又长又难懂,定义的变量名字也太长太多了吧!俺没那耐心一点一点扣了,也浪费了不少时间去分析那个代码,就放弃啦!第二次用的方法比较好,很简单易懂,也没那么长,我喜欢这个方法,嘿嘿嘿!

这个实验很有趣,微信发红包果然有意思!

一、实验要求

二、运行效果截图

三、代码示例

import java.util.Random;
import java.util.Scanner;

public class Hongbao {
    public static void main(String[] args) {
        Scanner s=new Scanner(System.in);
        double money;//红包总金额
        int num;//红包总个数
        System.out.println();
        System.out.println("author---Henan University.software engineering.李思佳");
        System.out.println("您正在发微信红包哦~");
        //输入红包总金额
        System.out.print("请输入红包总金额:");
        while(true){
            money=s.nextDouble();
            if(money<=0){
                System.out.print("输入金额不合法哦~请重新输入:");
            }
            else
                break;
        }
        //输入红包的个数
        System.out.print("请输入红包的个数:");
        while(true){
            num=s.nextInt();
            if(num<=0)
            {
                System.out.print("输入个数不合法哦~请重新输入:");
            }else if(money/num<0.01){
                System.out.print("输入的个数太多,不够分呢~请重新输入:");
            }else
                break;
        }

        Random r=new Random();
        if(money/num==0.01){//刚好一人一分钱
            for(int i=1;i<=num;i++){
                System.out.println("第"+i+"个红包为:"+0.01+"元。");
            }
        }
        else{//钱不是均分的情况
            double mymoney;//定义每个人抢到的钱数
            double maxmoney;//定义单个红包最大值,方便指定后续产生随机数的上限
            double randomMoney;//定义产生的随机钱数,不是每个人抢到的钱数,但是有关联

            for(int i=1;i<num;i++){//输出前num-1个红包的钱数
                maxmoney=money-(num-i)*0.01;//此时最大红包=剩余总钱数-剩下红包个数*分配最小金额
                randomMoney=(double) r.nextInt((int)((maxmoney-0.01)*100))/100;
                //随机取整数,因为随机数可能取到0,所以将上限值减去0.01。
                // 上限值为double类型的,所以*100变成多少分钱,再强转为整型。
                //再除以100,强转为double类型,就是产生的随机钱数。
                mymoney=randomMoney+0.01;//取到的随机钱数加上0.01即为真正抢到的红包钱数
                money=money-mymoney;//剩余的钱数=当前的钱数-当前被抢到的红包钱数
                System.out.println("第"+i+"个红包为:"+String.format("%.2f",mymoney)+"元。");
            }
            System.out.println("第"+num+"个红包为:"+String.format("%.2f",money)+"元。");
            //最后一个红包就是剩余的钱数,直接输出
        }
        System.out.println("您的红包已领完!");
    }
}

 

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值