ref: http://thunderbow.javaeye.com/blog/256838一种方法,在一个待选数组中随机产生一个数,然后把他放到待选数组的最后,然后从length-1里随机产生下一个随机数,如此类推 public static int[] randoms() { Random r = new Random();
int temp1,temp2; int send[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21}; int len = send.length; int returnValue[] = new int[22]; for(int i=0;i<22;i++) { temp1 = Math.abs(r.nextInt())% len; returnValue[i] = send[temp1]; temp2 = send[temp1]; send[temp1] = send[len-1]; send[len-1] = temp2; len--; } return returnValue; } }
可以用Set保证不重复 import java.util.HashSet; public class TestRandom { public static void main(String[] args) { HashSet<Integer> hs=new HashSet<Integer>(); while(hs.size()<10){ int i=(int)(Math.random()*100); hs.add(i); } System.out.println(hs); } }
import java.util.*;public class test6{ public static void main(String [] args) { int[] arr=intData(1,100,10); System.out.println(Arrays.toString(arr));
} /*产生一个长度为num的int数组,数组元素的值在start~end之间,元素不重复。 * */ public static int[] intData(int start,int end,int num){ int[] a=new int[num]; int i=0; Random rand=new Random();
public static int[] randoms()
{
Random r = new Random();
int temp1,temp2;
int send[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21};
int len = send.length;
int returnValue[] = new int[22];
for(int i=0;i<22;i++)
{
temp1 = Math.abs(r.nextInt())% len;
returnValue[i] = send[temp1];
temp2 = send[temp1];
send[temp1] = send[len-1];
send[len-1] = temp2;
len--;
}
return returnValue;
}
}
import java.util.HashSet;
public class TestRandom {
public static void main(String[] args) {
HashSet<Integer> hs=new HashSet<Integer>();
while(hs.size()<10){
int i=(int)(Math.random()*100);
hs.add(i);
}
System.out.println(hs);
}
}
public static void main(String [] args) {
int[] arr=intData(1,100,10);
System.out.println(Arrays.toString(arr));
}
/*产生一个长度为num的int数组,数组元素的值在start~end之间,元素不重复。
*
*/
public static int[] intData(int start,int end,int num){
int[] a=new int[num];
int i=0;
Random rand=new Random();
while(i<num){
int x=rand.nextInt(end-start+1)+start;
/*
*不知道你的意思,如果不是说数的每一位中不含零,把下一句注掉就可以了。
*/
if(hasZero(x)) continue;
boolean isRepeated=false;
for(int j=0;j<i;j++){
if(x==a[j]){
isRepeated=true;
break;
}
}
if(!isRepeated){
a[i++]=x;
}
}
return a;
}
/*
*判断x各位中是不是有零。
*/
public static boolean hasZero(int x){
boolean has=false;
int n;
while(x!=0){
n=x%10;
if(n==0){
has=true;
break;
}
x=x/10;
}
return has;
}
1-100 应该(int) (Math.random()*101)
1-50 应该(int) (Math.random()*51)