java实现随机数有两种方式1)Math.random()和Random类方法,我简单记录一下,方便自己回顾,更希望帮助他人。
Math.random()
这个方法是Math类提供的方法,用来返回一个处于0-1之间的浮点数。
用处:
1.返回一个位于0--1随机浮点数,对浮点数进行处理
System.out.println(String.format("%.2f", Math.random())); //0.46
对小数尾数进行格式化,使其小数点后两位.
2.返回一个位于0--N之间的整数:
int number = (int)(Math.random()*n)
例如 返回一个位于0---18之间的整数:
int number = (int)(Math.random()*18)
3.返回一个位于n--m之间的整数
int number = (int)(n+Math.random()*(m-n));
例如:返回一个位于20--25之间的整数:
int number = (int)(20+Math.random()*5);
System.out.println(number);
4.返回位于字母’n‘---’m‘之间的任意字符
例如:返回字母'a'--'z' 之间的任意字母;
char ch = (char)('a'+Math.randon()*('z'-'a')+1)
实例小游戏(猜数字)
public class NumberRiddle {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
while (true) {
System.out.println("是否开始游戏,按0表示退出,按任意键继续(输入负数自动退出游戏)");
int inputNumber = scan.nextInt();
if (inputNumber != 0) {
int imageNumner = (int) (Math.random() * 100);
System.out.println("随机数已产生,位于1-100之间,请开始猜数");
while (inputNumber != imageNumner) {
inputNumber = scan.nextInt();
if (inputNumber < imageNumner) {
System.out.println("输入数字太小,请重新猜");
} else if (inputNumber > imageNumner) {
System.out.println("请入数字太大,请重新猜");
} else if (inputNumber < 0) {
return;
}
}
System.out.println("恭喜你,猜对啦!");
} else {
System.out.println("谢谢参与");
return;
}
}
}
}
Random类:
实例方式1)Random random1 = new Random();
2)Random random2 = new Random(seedValue);
seedValue;随机数种子,传入一个数字,系统会根据随机数种子来生成随机数(主要是为了方便可再现随机数生成),默认1以系统当前时间作为随机数种子;
常用方法(Random.xx):
- nextInt() 返回值类型int 返回一个随机整数;
- nextInt(int n) 返回一个等于0小于n的随机整数;
- nextLong 返回一个随机长整形值;
- nextboolean 返回一个随机布尔类型
- 以此类推;
实战小项目(模拟微信红包功能)
import java.util.Random;
import java.util.Scanner;
public class ReaPaper {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入你要派发红包的金额");
double total = scan.nextFloat();
System.out.println("请输入你要派发红包的份数");
int portion = scan.nextInt();
double min = 0.01; // 红包最小金额
Random random = new Random();
System.out.println("开始随机产生红包");
for (int i = 1; i <= portion; i++) {
// 本次红包可能最大值 max = 可用金额-(红包总数-已经发送红包的数目)*最小红包金额;
double max = total - (portion - i) * 0.01;
double bound = max - min; // 本次红包可取值范围
double money = random.nextInt((int) bound * 100) / 100;
//random.nextInt(round) 可以在该round随机产生一个随机数 由于参数是整数,所以我们简单修改
// double money = String.format("%.2f", Math.random()args)*bound;
money += 0.01; // 防止出现0元
System.out.println("第" + i + "份红包的金额是--->" + money);
total = total - money;
}
}
}