JAVA随机数随机字母(微信抢红包小练习)

今天我们谈一谈JAVA中的随机数

你好WO SHI 七七卡卡 ^ _ ^

随机数 ——Math.random()

0.0 在Math类中存在一个random()方法,用于产生随机数字,这个方法生成在0.0<=生成数<1.0

0.1那么它默认的生成的数显然在有些时候是满足不了我们的,我们来看看它的升级版

类型返回值
(int)(Math.Random()*n)0<=返回值<n
m+(int)(Math.Random()*n)m<=返回值<m+n

随机数 ——字母

0.2 使用Math类的random() 方法也可以随机生成字符,(a----z)
(char)('a'+Math.random()*('z'-'a'-1));

0.3 A-Z与a-z的写法是不一样的(char)(cha1+Math.random*(char2-cha1+1));

注意:光理论是不够的,在此送大家一套2020最新Java架构实战教程+大厂面试宝典,点击此处进来获取 一起交流一起进步哦!

随机数 ——Random

0.4 除了Math 类,JAVA中还有Random可以创建数组。

Random c = mew Random;
Random c = new Random(seedValue);

c : Random类对象;
seedValue : 随机数生成的种子;

0.6 下面是几个常用的方法

类型返回值
public int nextInt返回一个随机整数
public int nextInt(int n)0<=返回值<n
public long nextLong()返回一个随机长整型数
public boolean nextBoolean()返回一个随机布尔型值
public float nextFloat()返回一个浮点型
public doublle nextDouble()返回一个双精度值

微信抢红包

我想大家一定在微信里抢过红包或者发过红包,今天我们就带领大家用JAVA制作一个微信的小程序。

1.0 我们先创建一个控制扫描器,输入显示发出的金额与红包个数

 System.out.println("--------微信抢红包---------");
    	  Scanner sc = new Scanner (System.in);
    	  System.out.println("金额¥");
    	  double total = sc.nextDouble();
    	  System.out.println("发出红包个数");
    	  int num = sc.nextInt();

1.1 我们的红包在散发出去的时候是不会出现 0¥ 所以我们先确定他的最小值并创建随机数。

Random c = new Random();
double min = 0.01;

1.2 随后我们用一个 for 循环来循环发放我们的红包;

for(int i=1;i<num;i++)

1.3 我们所抢的红包并不是平均发放的,它有最大值最小值,所以我们要创建一个最大值和最小值
我们的最大值如果等于我们红包钱数总数,那我们的其他的红包岂不就是没有钱了,所以,我们需要一个公式,

最大金额 =可分配金额 - (红包个数 - 已发出的红包数)*红包最小金额
double max = total - (num - i)* min;

1.4 我们并不是将所有的钱放到红包里所以我们再定义一下红包的范围

double range = max - min;//

1.5 现在我们开始计算应该放多少钱了,这一步有一点点绕。

double money = c.nextInt(range);

但我们在编译器里我们会发现报错了
在这里插入图片描述
这是因为nextInt()他的返回值(参数)是一个整型值,而我们的rangemoney他们都是 double 值,这样当然会报错了。
那我们怎么改呢?
例如我们的range是23.56这是一个double值,我们将range*100 23.56*100=2356,随后我们再将它强制转换成整数

double money = c.nextInt((int)range*100);

但我们最终的结果为2356¥,显然这是将我们的红包是在无形中放大了100倍,这样谁还会愿意发红包呢?咋解决,很简单我们之前 23.56*100 我们再除上100是不是就右变回去了,最后啊我们再返回一个double值就可以了

double money = (double)c.nextInt((int)range*100)/100;

这样我们就在range的范围里获取了随机的金额。

1.6 我们之前说了nextInt()这个方法它有一个弊端,它的返回值范围是0<=返回值<n,也就是说我们的红包还会出现0¥。
为了防止0¥的出现,我们定义一个 finalMoney

double finalMoney = money + min;

这才是我们最后的金额

1.7 上面是我们第一个红包所发出的金额,那我们的第2第3第num个红包的金额是多少呢?

total = total - finalMoney;

现在的total才是我们下一个红包的 可分配金额。
随后我们输出

System.out.println("第"+i+"个红包金额"+String.format("%.2f",finalMoney)+"¥");

(%.2f意思是保留两位小数)
最后啊我们将扫描器关掉

System.out.println("第"+num+"个红包金额"+String.format("%.2f",total)+"¥");
sc.close();

1.8 来我们试一下
在这里插入图片描述

这就是我们的微信抢红包的游戏。

1.9完整代码:

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();
    	  
	}

注意:光理论是不够的,在此送大家一套2020最新Java架构实战教程+大厂面试宝典,点击此处进来获取 一起交流一起进步哦!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

奇卡雨言

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

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

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

打赏作者

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

抵扣说明:

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

余额充值