规则:
前六位 红球 1-33 不能重复 升序排列
最后一位 蓝球 1-16 可以和前六位重复
思想:
一、为了生成前6位数不重复:
方法1.每生成一位随机数都与数组中现有的随机数进行比较:重复,重新生成;不重复,生成下一个随机数;
方法2.先生成6位随机数,进行排序;查找是否有相同的数字:如果有,两个相同的数字一定左右相邻,将相同的两个替换一个,然后在进行排序,进行查找(感觉是递归的过程,此文章并未用递归算法);如果没有,继续相互比较,直到没有相同的数字。
二、生成第7位数
算法实现:
方法1:
package methodDemo;
import java.util.Arrays;
public class Test11 {
/*双色球彩票
* 双色球规则:
前六位 红球 1-33 不能重复 升序排列、
最后一位 蓝球 1-16 可以与前六位重复
*/
public static void main(String[] args) {
int lottery[]=getlottery();
System.out.println("双色球是:");
System.out.println(Arrays.toString(lottery));
}
public static int[] getlottery(){
int lottery[]=new int[6];
for(int i=0;i<6;i++){
/*生成随机数*/
int num=(int)(Math.random()*33+1);
lottery[i]=num;
}
int lottery1[]=bubbleSort(lottery);
lottery1=outrepeat(lottery1);
int finalLotterty[] = new int[7];
//数组的复制:
// for(int i=0;i<6;i++){
// finalLotterty[i]=lottery1[i];
//
// }
System.arraycopy(lottery,0,finalLotterty,0,6);
//处理第7位
finalLotterty[6]=(int)(Math.random()*16+1);
return finalLotterty;
}
/*冒泡排序*/
public static int[] bubbleSort(int arr[]){
for(int i=0;i<arr.length-1;i++){
for(int j=0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
return arr;
}
/*查找是否有重复数字*/
public static int[] outrepeat(int arr[]){
int i=0;
while(i<arr.length-1){
if(arr[i]!=arr[i+1]){
i++;
}else
{
int num=(int)(Math.random()*33+1);
arr[i]=num;
arr=bubbleSort(arr);
i=0;
}
}
return arr;
}
}
方法2:
package methodDemo;
import java.util.Arrays;
public class Test12 {
public static void main(String[] args) {
int lottery[]=getLottery();
System.out.println(Arrays.toString(lottery));
}
/**
*
* @return 返回双色球数
*/
public static int[] getLottery(){
int lottery[]=new int[6];
for (int i=0;i<6;i++){
int num=(int )(Math.random()*33+1);
while(isContain(lottery,num)){
num=(int )(Math.random()*33+1);
}
lottery[i]=num;
}
int finalLottery[]=new int[7];
System.arraycopy(lottery,0,finalLottery,0,6);
finalLottery[6]=(int)(Math.random()*16+1);
return finalLottery;
}
/**
*该方法用于判定给定的数组中是否包含指定的元素
* @param arr 给定的数组
* @param b 想要判断的元素
* @return 当给定的数组中含有指定的元素时返回true 否则返回false
*/
public static boolean isContain(int arr[],int b){
boolean x=false;
for(int m:arr){
if(b==m){
x=true;
break;
}
}
return x;
}
}