Random类
在实际开发过程中随机数的应用很普遍,为此Java的java.util包中提供了Random类,通过实例化一个Random类对象可以创建一个随机数生成器,语法如下:
Random r = new Random();
其中r是指Random对象,Random类提供了生成各种数据类型随机数的方法,这些方法与方法说明如下表:
方法 | 返回值 | 功能描述 |
---|---|---|
nextInt() | int | 返回一个随机int型值 |
nextInt(int n) | int | 返回大于或等于0、小于n的随机int型值 |
nextLong() | long | 返回一个随机long型值 |
nextBoolean() | boolean | 返回一个随机Boolean型值 |
nextFloat() | float | 返回一个随机float型值 |
nextDouble() | double | 返回一个随机double型值 |
nextGaussian() | double | 返回一个概率密度为高斯分布的double型值 |
下面以一个猜数字游戏为例,代码如下:
import java.util.Random;
import java.util.Scanner;
public class Demo { // 创建类GetCon
public static void main(String[] args) {
//创建Random对象
Random c = new Random();
System.out.print("请输入要猜数字的范围(1-100)");
Scanner sc2 = new Scanner(System.in);
//获取随机数字并赋予num变量
int num = c.nextInt(sc2.nextInt());
while(true){
System.out.print("请输入数字:");
//获取控制台输入的数字
Scanner sc1 = new Scanner(System.in);
//把输入的数字赋予num1变量
int num1 = sc1.nextInt();
//输入的数字和随机生成的数据比较大小
if(num1 > num) {
System.out.println("抱歉,您猜的数字太大了!");
}else if(num1 < num){
System.out.println("抱歉,您猜的数字太小了!");
}else if(num1 == num) {
System.out.println("恭喜您,您猜对了");
System.out.println("退出控制台");
//退出控制台
System.exit(0);
}
}
}
}
返回结果:
在模拟一个微信抢红包的例子,代码如下:
import java.util.Random;
import java.util.Scanner;
public class Dpc { // 创建一个RedBags类
public static void main(String[] args) {
System.out.println("—————————模拟微信抢红包—————————\n");
Scanner sc = new Scanner(System.in); // 控制台输入
System.out.print("请输入要装入红包的总金额(元):");
double total = sc.nextDouble(); // 输入“红包的总金额”
System.out.print("请输入红包的个数(个):");
int bagsnum = sc.nextInt(); // 输入“红包的个数”
double min = 0.01; // 初始化“红包的最小金额”
Random random = new Random(); // 创建随机数对象random
if (total / bagsnum == 0.01) { // 红包总金额与个数的商为0.01时
for (int i = 1; i < bagsnum; i++) {
double money = min; // 让每个包中的金额均为最小金额0.01
total -= money; // 红包中的剩余金额
System.out.println("第" + i + "个红包:" + String.format("%.2f", money) + "元");
}
} else if (total / bagsnum < 0.01) { // 红包总金额与个数的商小于0.01时
System.out.println("要保证每个人都能分到1分钱哦!");
return; // 不再执行第22行以下的代码,例如第46行
} else {
for (int i = 1; i < bagsnum; i++) { // 设置“循环”
/*
* 本次红包可用最大金额 = 可分配金额 - (红包总数 * 已发出的红包数) * 红包的最小金额
*/
double max = total - (bagsnum - i) * min;
double bound = max - min; // 设置随机金额的取值范围
/*
* 据随机金额的取值范围,随机生成红包金额。 由于nextInt(int
* bound)只能用整型做参数,所以先将bound乘100(小数点向右挪两位)
* 获取到一个整数后,将这个整数除100(小数点向左挪两位) 并转换成与金额相同的浮点类型
*/
double safe = (double) random.nextInt((int) (bound * 100)) / 100;
double money = safe + min; // 最后加上红包的最小金额,以防safe出现0值
total = total - money; // 替换total的值
System.out.println("第" + i + "个红包:" + String.format("%.2f", money) + "元");
}
}
// 输出剩余金额
System.out.println("第" + bagsnum + "个红包:" + String.format("%.2f", total) + "元");
sc.close(); // 关闭控制台输入
}
}
返回结果: