import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 模拟超级大乐透随机选号
* @author MARS
*
*/
public class RedomTest {
public static void main(String[] args){
// 声明随机数对象
Random objRandom = new Random();
// 声明一个数组存放前区号码
int nQian[] = new int[5];
// 声明一个数组存放后区号码
int nHou[] = new int[2];
// 声明一个正则表达式对象,用于匹配是否是一位数字
Pattern objP = Pattern.compile("\\d");
// 所要操作的字符串
Matcher objM = null;
/*
* 一共产生5注号码
*/
for(int a = 0;a<5;a++){
/*
* 产生5个前区号码
*/
for(int i = 0;i<5;i++){
//产生0-32之间的随机数存放在数组里面
nQian[i] = objRandom.nextInt(33);
// 如果有“0”出现,则重新执行本次循环
if(nQian[i]==0){
i--;
continue;
}
/*
* 不是第一个随机数要进入判断是否与前面的重复
*/
if(i != 0){
for(int b = 0;b<i;b++){
// 如果有重复数字,则跳出本次循环重新执行
if(nQian[i]==nQian[b]){
i--;
continue;
}
}
}
}
/*
* 输出前区号码
*/
for(int x = 0;x<nQian.length;x++){
int nTemp = nQian[x];
String strTemp = String.valueOf(nTemp);
/*
* 使用正则表达式判断是否是一位随机数,如果是一位随机数,则在之前加上一个“0”;
* 如果不是,则原样输出
*/
objM = objP.matcher(strTemp);
boolean flag = objM.matches();
if(flag){
System.out.print(" 0"+strTemp);
}else{
System.out.print(" "+nQian[x]);
}
}
// 输出一个分隔符,用于隔离前区号码和后区号码
System.out.print(" +");
/*
*产生2个后区号码
*/
for(int j = 0;j<2;j++){
//产生0-12之间的随机数存放在数组里面
nHou[j] = objRandom.nextInt(13);
// 如果有“0”出现,则重新执行本次循环
if(nHou[j]==0){
j--;
continue;
}
/*
* 不是第一个数,则与前面比较是否重复
*/
if( j !=0){
for(int b = 0;b<j;b++){
//如果有重复数字,则跳出本次循环重新执行
if(nHou[j]==nHou[b]){
j--;
continue;
}
}
}
}
/*
* 输出后区号码
*/
for(int m = 0;m<nHou.length;m++){
int nTemp = nHou[m];
String strTemp = String.valueOf(nTemp);
/*
* 使用正则表达式判断是否是一位随机数,如果是一位随机数,则在之前加上一个“0”;
* 如果不是,则原样输出
*/
objM = objP.matcher(strTemp);
boolean flag = objM.matches();
if(flag){
System.out.print(" 0"+strTemp);
}else{
System.out.print(" "+nHou[m]);
}
}
// 每一注结束输出换行
System.out.println("");
}
}
}