JAVA微信抢红包(更改版^__^)

你好WO SHI 七七卡卡 ^ _ ^

JAVA随机数随机字母(微信抢红包小练习)
中我们制作了微信抢红包的小制作,但根据好友们的反应有一些小bug
在看之前回顾一下源代码

问题

  1. 1元分红包时金额居然达不到1元;
  2. 红包少了金额对不上了;
  3. 第一个红包总是最多的;
    今天对于以上的问题我们对代码进行修改,为微信抢红包的小程序进行修改
    我们对上次的代码进行修改:(上次代码)
public static void main(String[] args) {
    	  System.out.println("--------微信抢红包---------");
    	  Scanner sc = new Scanner (System.in);
    	  System.out.println("金额¥");
    	  double total = sc.nextDouble();
    	  System.out.println("发出红包个数");
    	  int num = sc.nextInt();
    	  
    	  double min = 0.01;//红包最小金额
    	  Random c = new Random();//创建随机数
    	  
    	  for(int i=1;i<=num;i++) {
    		  /*
    		   * 最大金额 =可分配金额 - (红包个数 - 已发出的红包数)*红包最小金额
    		   */
    		  double max = total - (num - i)* min;
    		  double range = max - min;//
    		  
    		  double money = (double)c.nextInt((int)(range*100))/100;
    		  double finalMoney = money + min;
    		  total = total - finalMoney;
    		  System.out.println("第"+i+"个红包金额"+String.format("%.2f",finalMoney)+"¥");
    	  }//保留两位小数
    	  
    	  sc.close();
    	  
	}

分析问题

1. 1元分红包时金额居然达不到1元

我们再推理一遍会发现,一个小错误那就是这一行代码
for(int i=1;i<=num;i++) ——i<=num当我们的金额为 1元total=1; num=1; 我们定义了int i=1——i=num=1我们执行了for循环,所以我们的最后输出的金额是经过了for循环中加减的处理的, 所以我们最后输出的金额是小于1元的。

2. 红包少了金额对不上了

这个问题的原理与上一问题类似,假如我们的 金额:5 ;红包数量: 5;
我们输出后发现
在这里插入图片描述
总金额却成了4.9元,
就是因为我们的第五个红包执行了**for()**使我们的最后一个红包的金额减小了,

3. 第一个红包总是最多的

这个问题应该是随机的问题,多试几次就应该没事了。

4. 更改

我们将 for(int i=1;i<=num;i++) 更改为 for(int i= 1;i < num; i++) 将等号去掉,那i < num 最后一个红包怎么办呢? 很简单我们在 for() 外输出一下最后一个红包就可以了System.out.println("第"+num+"个红包金额"+String.format("%.2f",total)+"¥");
问题1

在这里插入图片描述
问题2
在这里插入图片描述
金额为5元。
问题3
当然我们的第一个红包不是最大的了。
完整代码:(完整的解释请点击 JAVA随机数随机字母(微信抢红包小练习)

public static void main(String[] args) {
    	  System.out.println("--------微信抢红包---------");
    	  Scanner sc = new Scanner (System.in);
    	  System.out.println("金额¥");
    	  double total = sc.nextDouble();
    	  System.out.println("发出红包个数");
    	  int num = sc.nextInt();
    	  
    	  double min = 0.01;//红包最小金额
    	  Random c = new Random();//创建随机数
    	  
    	  for(int i=1;i<num;i++) {
    		  /*
    		   * 最大金额 =可分配金额 - (红包个数 - 已发出的红包数)*红包最小金额
    		   */
    		  double max = total - (num - i)* min;
    		  double range = max - min;//
    		  
    		  double money = (double)c.nextInt((int)(range*100))/100;
    		  double finalMoney = money + min;
    		  total = total - finalMoney;
    		  System.out.println("第"+i+"个红包金额"+String.format("%.2f",finalMoney)+"¥");
    		  
    	  }//保留两位小数
    	  System.out.println("第"+num+"个红包金额"+String.format("%.2f",total)+"¥");
		
    	  sc.close();
    	  
	}

今天我们对 JAVA随机数随机字母(微信抢红包小练习)
中的微信抢红包小练习进行了修改,编程就是这个样,一个小小的**=** 完全改变了我们的最后效果,在这也是对自己的警醒,对大家的提醒,,以我为戒。我觉得将错误与正确对比来看,印象会更加深刻,在这也对大家表示歉意,也幸亏大家的提醒,我才发现了错误,在这里也向大家表示感谢,谢谢大家

希望对你在学习 JAVA 的道路上提供一点点帮助。谢谢,

WO SHI 七七卡卡 ^ _ ^ 如果代码对你有帮助还希望 点赞+关注
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奇卡雨言

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值