作者说:
这个实验运用到了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("您的红包已领完!");
}
}