您的位置:首页 > 编程语言 > Java开发

java 生成一组不重复的随机数

2016-01-18 21:10 597 查看

引出这个问题的是,是我在学习设计拼图游戏中出现的,拼图游戏开始的时候,图是散乱的,比如拼图游戏被分成了8*4 共32块,那么32块图对应着32个数,而若要使每次开始前的排列顺序不一致,就需要产生32个随机数。看过别人的方法,大郅的思想是0到32之间产生32个不同的随机数,所以创建了一个长度为32的Boolean数组用于存放产生的数字是否已经出现过,如果出现过,while循环会一直继续下去直到产生一个从未出现过的数字。而这种方法所要产生随机数的个数是不能保障的,最小可能产生32次随机数即可,也有可能产生无穷次随机数,仍不能满足要求。倘若需要生成数十万个随机数,那么这种方法显然需要耗费大量的计算时间。

因此我的解法是:共生成n次随机数,这里n就是32啦。利用java自带的Random函数,调用random.nextInt(m),即可生成0至m-1之间的随机数。第一次生成0至32之间的随机数,第二次生成0-31之间的随机数,依次类推。若生成的随机数已经出现过了,可做以下处理:将已经生成好的前i个随机数排序,并将当前生成的随机数与排序好的随机数组逐次比较,如果该生成的随机数大于等于排序好的数组元素,则随机数加一。这样做的目的就是将随机数插入到已经生成好的随机数组中。该解法的思想类似于排队插队问题。
package main;
import java.util.Random;
public class main {
public static void main(String[] args){
//JFrameGame jframe = new JFrameGame(new JPanelGame());
/*int numArray[] ={1,5,6,2,4,3};
int sortArray[] =new int[6];
sortArray[0] = numArray[0];
for(int i = 0 ;i <6 ; i++){
//最外层循环,对待排序数组进行全部遍历
for(int k =0 ; k<=i ; k++){
// 第二层循环 与前i个已经排序好的数组进行
if(numArray[i]<sortArray[k]){
//如果待排序数组比 已经排序好的数组第k个元素小
for(int m = i ; m >k; m--)
{//则对从 k个元素以后排好的数组后移一个
sortArray[m]=sortArray[m-1];
}
sortArray[k]=numArray[i];
break;

}else if(k==i){
sortArray[i]=numArray[i];
}
System.out.print(sortArray[k]);
}
System.out.println();
}
for(int k =0 ;k <6; k ++)
System.out.print(sortArray[k]+"...");
*/
Random random = new Random() ;
int cnt = 6 ;
boolean[] isShown = new boolean[cnt];
int[] numArray = new int[cnt];
int[] sortArray = new int[cnt];
for(int i = 0 ; i <cnt ; i++){
int temp = random.nextInt(cnt-i);
System.out.println("生成的随机数 : "+temp+":");
if(i == 0) sortArray[i] = temp ;

for(int k =0 ; k<=i ; k++){
if(temp >= sortArray[k]) temp ++ ;
System.out.print(sortArray[k]);
// 第二层循环 与前i个已经排序好的数组进行
if(temp<sortArray[k]){
//如果待排序数组比 已经排序好的数组第k个元素小
for(int m = i ; m >k; m--)
{//则对从 k个元素以后排好的数组后移一个
sortArray[m]=sortArray[m-1];
}
sortArray[k]=temp;

break;

}else if(k==i){
sortArray[i]=temp;

}

}
System.out.println();
numArray[i] = temp ;

}
for(int i = 0 ; i <cnt ; i ++){
System.out.println("cnt "+i+":" +numArray[i]);
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java random