首先,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说明效果。