你好WO SHI 七七卡卡 ^ _ ^
在 JAVA随机数随机字母(微信抢红包小练习)
中我们制作了微信抢红包的小制作,但根据好友们的反应有一些小bug
在看之前回顾一下源代码
问题
- 1元分红包时金额居然达不到1元;
- 红包少了金额对不上了;
- 第一个红包总是最多的;
今天对于以上的问题我们对代码进行修改,为微信抢红包的小程序进行修改
我们对上次的代码进行修改:(上次代码)
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随机数随机字母(微信抢红包小练习)
中的微信抢红包小练习进行了修改,编程就是这个样,一个小小的**=** 完全改变了我们的最后效果,在这也是对自己的警醒,对大家的提醒,,以我为戒。我觉得将错误与正确对比来看,印象会更加深刻,在这也对大家表示歉意,也幸亏大家的提醒,我才发现了错误,在这里也向大家表示感谢,谢谢大家