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