【Java】在一定的范围内产生不同的随机数

首先,Java里面产生一个随机数很简单,不用像别的编程语言,如C,Javascript,asp等,只会产生一个0-1之间的随机小数,然后让你再通过一些数学算式去计算。能够随心所欲地易如反掌地产生一个随机数。记得引入java.util.*就行了。

比如如下的程序:

import java.util.*;

public class Random_Test {
	public static void main(String[] args) {
		System.out.println(new Random().nextDouble());//能产生一个0-1的随机小数
		System.out.println(new Random().nextInt(10));//能产生一个大于或等于0,小于但不等于10的随机整数,也就是个位数
	}
}

但是,要在一定范围中产生不同的随机数,这样的花样产生随机数表演就不是这么简单了,

之前我在《【ASP】在特定的范围内产生N个不同的随机数》(点击打开链接)曾经讨论过这个问题,但无奈ASP里面的代码杂糅,也就是vbscript,常常与html代码混在一起,只能给出了相应的算法,下面用具体的Java可执行的代码来说明一下这个程序:

import java.util.*;
import java.io.*;

public class Random_Different {
	public static void main(String[] args) throws IOException{
		System.out.print("输入产生的随机数范围,1到N,N=");
		int n=0;
		try{
			n=Integer.parseInt(new BufferedReader(new InputStreamReader(System.in)).readLine());
		}catch(Exception e){
			System.out.println("N必须为正整数");
			return;
		}
		if(n<1){
			System.out.println("N必须为正数");
			return;
		}
		int randArr[]=new int[n];
		int i=0;
		while(i<n){
			int rand=(new Random().nextInt(n)+1);
			boolean isRandExist=false;
			for(int j=0;j<randArr.length;j++){
				if(randArr[j]==rand){
					isRandExist=true;
					break;
				}
			}
			if(isRandExist==false){
				randArr[i]=rand;
				i++;
			}			
		}
		System.out.println(Arrays.toString(randArr));
	}
}

思想还是上次的那个思想:

首先在1~n产生一个随机数X,然后对这个之前产生的数据进行遍历,判断是否存在有数等于这个新产生的随机数的,如果有,立flag,

然后对之前的数据遍历完毕之后,判断flag是否立起来,

如果是,就不添加这个随机数进数组,重新产生随机数并收起flag,再重新遍历已有的数据中是否已有这个随机数,

如果否,就添加,直到n个数据产生完毕。

最后输出这个n个数据。

具体的运行效果如下:

技术分享

为了说明这个程序是健壮的,让电脑输入N,其中这个N从1-20,可以观察到,输出的数组中没有一个数是相同的,完成任务!

技术分享

更多的数也是没有问题的,你设置N=二十万,都没有问题,这里由于本猿猴的机器太渣,设置个N=33说明效果。

技术分享

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。