java基础之随机数
Random类
java中的随机数实际上为伪随机数,即产生的随机数是由算法生成的,但平时的使用并不去探讨其算法,所以我们只来介绍其用法和作用,java中的随机数由其内置的Random类生成。Random类是Java.util包中提供的一个基于伪随机流,用于生成随机数的工具类,该类中提供了一系列用于产生伪随机数据的方法,如:nextBoolean(),nextDouble(),nextInt()等.
Random类用法如下:
import java.util.Random;
public class RandomDemo {
public static void main(String[] args) {
Random r = new Random();
//0~9的随机数
System.out.println(r.nextInt(10));
//从一个数组中随机产生一个角色
String []names = {"韩信","李白","元歌","苏烈","貂蝉","妲己","鲁班"};
System.out.println(names[r.nextInt(names.length)]);
}
}
基于Random类实现一个随机位数的验证码生成器
import java.util.Random;
public class ValidateUtils {
//ctrl+shift+x/y(大小写转换)
static String s = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
public static String genVCode(int count){
Random r = new Random();
//声明临时变量用于存储生成的验证码字符串
String code = "";
//循环count次获取每次取到的字符
for(int i = 0;i<count;i++){
//随机产生一个索引(0~s.length()-1)
int index = r.nextInt(s.length());
//把每次获取的字符拼接到字符串中
code += s.charAt(index);
}
//循环结束后返回生成的字符串对象
return code;
}
public static void main(String[] args) {
//生成并输出长度为6的验证码字符串
System.out.println(genVCode(6));
}
}
Math类中随机数的用法
//返回一个0.0(包含)~1.0(不包含)之间随机数
System.out.println(Math.random());
//从1-10之间随机获取一个整数? 5-10?
System.out.println("---------");
for (int i = 0; i < 100; i++) {
// int n = (int)(Math.random() * 10) + 1;
int n = (int)Math.ceil(Math.random()*10);
System.out.println(n);
例题
1.完成一个验证码生成器,要求能够随机从0-9a-zA-Z之间随机一组(个数可以自己设定)验证码
public static String genVCode(int count)
基于Scanner实现验证功能
import java.util.Random;
import java.util.Scanner;
public class ValidateUtils {
static Scanner sc = new Scanner(System.in);
//ctrl + shift +x/y 大小写转换
static String s = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
public static String genVCode(int count) {
Random r = new Random();
//声明临时变量用于存储生成的验证码字符串
String code = "";
//循环count次获取每次取到的字符
for(int i = 0;i < count;i++) {
//随机产生一个索引 (0~s.length()-1)
int index = r.nextInt(s.length());
//把每次获取的字符拼接到字符串中
code += s.charAt(index);
}
//循环结束后返回生成的字符串对象
return code;
}
//输入验证
public static void yanzheng(String s2) {
String s1 = sc.nextLine();
//不区分大小写
if(s1.equalsIgnoreCase(s2)) {
System.out.println("验证成功");
}else {
System.out.println("您输入的验证码有误,请重新输入");
yanzheng(s2);
}
}
public static void main(String[] args) {
String s2 = genVCode(6);
System.out.println(s2);
yanzheng(s2);
}
}
2.完成一个随机抽奖系统,要求能随机从班级中抽取一名幸运学生,但是抽取不允许抽取到重复的学生
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
/**
* 抽奖系统
* @author max
*
*/
public class ExtractLucker {
static ArrayList<String> list ;
Random r = new Random();
static {
//JDK1.7+
list = new ArrayList<>();
list.add("皇甫");
list.add("上官");
list.add("端木");
list.add("欧阳");
list.add("西门");
list.add("赫连");
list.add("慕容");
list.add("司马");
list.add("诸葛");
}
public String extract() {
//基于列表中的元素个数随机一个索引
int index = r.nextInt(list.size());
//获取并存储抽取到的幸运儿的临时变量
String name = list.get(index);
//从集合中移除已经被抽走的元素
list.remove(index);
return name;
}
public void start() {
msg("===========欢迎来到max抽奖系统==========");
msg("【1】抽取");
Scanner sc = new Scanner(System.in);
try {
int i = sc.nextInt();
if(i == 1) {
//抽取
String name = extract();
msg("恭喜获奖得主:"+name +"喜提玛莎拉蒂");
if(list.size() < 1) {
msg("抽奖完毕!");
System.exit(1);
return;
}
}else {
msg("请输入正确的指令:");
}
start();
}catch(Exception e) {
msg("请输入正确的指令:");
start();
}
}
public void msg(Object s) {
System.out.println(s);
}
public static void main(String[] args) {
new ExtractLucker().start();
}
}
3.参考斗地主的游戏规则,完成一个发牌的功能(54张牌,考虑点数,花色;三名玩家,其中地主比其他玩家多3张牌)
Player类
import java.util.ArrayList;
public class Player {
private int id;
private String name;
private ArrayList<Poker> pokers =new ArrayList<>();
private boolean boss;//是否地主
public Player() {
// TODO Auto-generated constructor stub
}
public Player(int id, String name) {
super();
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public ArrayList<Poker> getPokers() {
return pokers;
}
public void setPokers(ArrayList<Poker> pokers) {
this.pokers = pokers;
}
public boolean isBoss() {
return boss;
}
public void setBoss(boolean boss) {
this.boss = boss;
}
}
Poker类
public class Poker {
private String flower;
private String pointer;
private int sort;
public Poker() {
// TODO Auto-generated constructor stub
}
public Poker(String flower, String pointer, int sort) {
super();
this.flower = flower;
this.pointer = pointer;
this.sort = sort;
}
public String getFlower() {
return flower;
}
public void setFlower(String flower) {
this.flower = flower;
}
public String getPointer() {
return pointer;
}
public void setPointer(String pointer) {
this.pointer = pointer;
}
public int getSort() {
return sort;
}
public void setSort(int sort) {
this.sort = sort;
}
@Override
public String toString() {
return flower+"-"+pointer;
}
}
PokerGame类
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
/**
* 斗地主发牌:54张牌,地主多3张
* @author max
*
*/
public class PokerGame {
static List<Player> players;
static ArrayList<Poker> list = new ArrayList<>();
static String[] flowers = { "方块", "梅花", "黑桃", "紅桃" };
static String[] pointers = { "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2" };
int bossIndex;
String role;
static {
// 初始化扑克
for (int i = 0; i < flowers.length; i++) {
for (int j = 0; j < pointers.length; j++) {
// 生成一張扑克对象
Poker p = new Poker(flowers[i], pointers[j], j);
list.add(p);
}
}
// 单独将大小王加入集合
list.add(new Poker("小", "王", 13));
list.add(new Poker("大", "王", 14));
// 初始化玩家
players = Arrays.asList(new Player(1, "刘备"), new Player(2, "关羽"), new Player(3, "张飞"));
}
/** 随机地主 */
public void pushBoss() {
Random r = new Random();
bossIndex = r.nextInt(players.size());
// 设置被随机到的玩家为地主
players.get(bossIndex).setBoss(true);
}
/** 发牌 */
public void pushPoker() {
Random r = new Random();
for (int n = 0; n < players.size(); n++) {
for (int i = 0; i < 17; i++) {
int index = r.nextInt(list.size());
// players.get(n).getPokers().add(list.get(index));
Player p = players.get(n);
ArrayList<Poker> pks = p.getPokers();
Poker pk = list.get(index);
pks.add(pk);
list.remove(index);
}
}
// 将最后剩余的牌(3张)全部给地主
players.get(bossIndex).getPokers().addAll(list);
}
public void start() {
pushBoss();
pushPoker();
for (Player p : players) {
if(p.isBoss()) {
role = "地主";
}else{
role = "农民";
}
System.out.println(p.getName() + "-"+role +"-"+p.getPokers());
}
}
public static void main(String[] args) {
new PokerGame().start();
}
}
运行结果