JAVA作业四:模拟微信发红包

6 篇文章 0 订阅

问题:模拟微信发红包,定义红包金额和个数,随机生成相应个数的红包,每个红包的金额大小随机,但总金额与红包金额一致。
问题分析
生活常识:微信红包最小金额是一分,也就是0.01元
根据生活常识可以将这个问题分三种情况讨论如下:
情况1,用户定义的红包总金额和红包总个数恰好使每个人分到0.01元,此时红包总金额除以红包总个数等于0.01;
情况2,红包总金额和红包总个数的关系可以使每个人分到的钱大于等于红包最小金额0.01(总有人抢到的红包钱是大于0.01的,要不然就与情况1重复了),此时红包总金额除以红包总个数大于0.01;
情况3,红包总金额和红包总个数在每个人分到0.01的情况下依然不成立,此时提示用户输入增大红包金额还是减少红包总个数的选项,此时红包总金额除以红包总个数小于0.01。
代码运行截图
情况1:
在这里插入图片描述

情况2:
在这里插入图片描述
情况3:
在这里插入图片描述
在这里插入图片描述

具体实现代码

package 实验.作业4;

import java.util.Random;
import java.util.Scanner;
import java.text.DecimalFormat;

public class red_bags {
    public static void main(String[] args) {
        System.out.println("**  微信抢红包  **");
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入红包总金额(元):");
        double red_bags_total = sc.nextDouble();
        System.out.print("请输入红包个数(个 ):");
        int red_bags_count = sc.nextInt();
        double min = 0.01;   //红包最小金额
        Random c = new Random();   //随机数
        int x = 1;
        while (x == 1) {
            if (red_bags_total / red_bags_count == min) {
                for (int i = 1; i <= red_bags_count; i++) {
                    System.out.println("第" + i + "个人抢到红包:" + 0.01 + "元");
                    x = 0;
                }
                System.out.println("程序结束,感谢您的使用!");
            } else if (red_bags_total / red_bags_count > 0.01) {
                for (int i = 1; i < red_bags_count; i++) {
                    //在保证后red_bags_count - i个人都得到最小红包金额0.01元的时候,前面i个人总共分的钱的总数
                    double max = red_bags_total - (red_bags_count - i) * min;
                    double bound = max - min;

                    double safe = (double) c.nextInt((int) (bound * 100)) / 100;//nextInt(int n)返回0~n之间的随机值,n取不到
                    double money = safe + min;//以防出现0值
                    red_bags_total = red_bags_total - money;//发出一个红包后剩下的总金额
                    System.out.println("第" + i + "个人抢到红包" + String.format("%.2f", money) + "元");
                }
                System.out.println("第" + red_bags_count + "个人抢到红包" + String.format("%.2f", red_bags_total) + "元");
                x = 0;
                System.out.println("程序结束,感谢您的使用!");
            } else {
//            while(red_bags_total / red_bags_count < min)
                System.out.println("每个人收到红包的最小金额是0.01元哦,增加红包总金额或者减少红包总个数:");
                System.out.print("增加红包总金额1 or 减少红包总个数0:");
                int temp = sc.nextInt();
                if (temp == 1) {
                    System.out.print("增加多少钱呢?");
                    double temp_money = sc.nextDouble();
                    red_bags_total += temp_money;
                } else if (temp == 0) {
                    System.out.print("请重新输入红包总个数:");
                    red_bags_count = sc.nextInt();
                } else {
                    System.out.println("你的选择有误,发红包失败,退出程序!");
                    x = 0;
                }
            }
        }
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值