List list = new ArrayList(); Random r = new Random(); boolean b = true; int num; while (b) { num = r.nextInt(1000); if (!list.contains(num)) { list.add(num); } if(list.size() == 100){ b = false; } } System.out.println(Arrays.asList(list));
Random ran=new Random(); int r=0; m1:while(true){ int n=ran.nextInt(10000); r=n; int[] bs=new int[4]; for(int i=0;i<bs.length;i++){ bs[i]=n%10; n/=10; } Arrays.sort(bs); for(int i=1;i<bs.length;i++){ if(bs[i-1]==bs[i]){ continue m1; } } break; } System.out.println(r);
人工干预了就不能称为随机了!import java.util.Random;public class RandomTest { public static void main(String[] args) { System.out.println(random(4)); } public static String random(int n) { if (n < 1 || n > 10) { throw new IllegalArgumentException("cannot random " + n + " bit number"); } Random ran = new Random(); if (n == 1) { return String.valueOf(ran.nextInt(10)); } int bitField = 0; char[] chs = new char[n]; for (int i = 0; i < n; i++) { while(true) { int k = ran.nextInt(10); if( (bitField & (1 << k)) == 0) { bitField |= 1 << k; chs[i] = (char)(k + '0'); break; } } } return new String(chs); } }
5楼能不能解释一下那个while里面的代码的意思呀怎么样的实现才叫“非人工干预”
使用一个 int 作为位域,实际上只用到了 int 32 位中的低 10 位。每生成一个数字 N 就将低第 N 位置为 1,若检查到当前位域为“1”时,则重新随机。“不重复”与“随机”就是一对矛盾,当加上“不重复”时,就需要干预随机数的生成。
最简洁的代码来啦....package com.xuyisen.monitor.test;import java.util.Random;public class Test {
/** * 获取count个随机数 * @param count 随机数个数 * @return */ public String game(int count){ StringBuffer sb = new StringBuffer(); String str = "0123456789"; Random r = new Random(); for(int i=0;i<count;i++){ int num = r.nextInt(str.length()); sb.append(str.charAt(num)); str = str.replace((str.charAt(num)+""), ""); } return sb.toString(); } public static void main(String[] args) { Test t = new Test(); System.out.println(t.game(4)); } }
List list = new ArrayList();
Random r = new Random();
boolean b = true;
int num;
while (b) {
num = r.nextInt(1000);
if (!list.contains(num)) {
list.add(num);
}
if(list.size() == 100){
b = false;
}
}
System.out.println(Arrays.asList(list));
Random ran=new Random();
int r=0;
m1:while(true){
int n=ran.nextInt(10000);
r=n;
int[] bs=new int[4];
for(int i=0;i<bs.length;i++){
bs[i]=n%10;
n/=10;
}
Arrays.sort(bs);
for(int i=1;i<bs.length;i++){
if(bs[i-1]==bs[i]){
continue m1;
}
}
break;
}
System.out.println(r);
System.out.println(random(4));
} public static String random(int n) {
if (n < 1 || n > 10) {
throw new IllegalArgumentException("cannot random " + n + " bit number");
}
Random ran = new Random();
if (n == 1) {
return String.valueOf(ran.nextInt(10));
}
int bitField = 0;
char[] chs = new char[n];
for (int i = 0; i < n; i++) {
while(true) {
int k = ran.nextInt(10);
if( (bitField & (1 << k)) == 0) {
bitField |= 1 << k;
chs[i] = (char)(k + '0');
break;
}
}
}
return new String(chs);
}
}
/**
* 获取count个随机数
* @param count 随机数个数
* @return
*/
public String game(int count){
StringBuffer sb = new StringBuffer();
String str = "0123456789";
Random r = new Random();
for(int i=0;i<count;i++){
int num = r.nextInt(str.length());
sb.append(str.charAt(num));
str = str.replace((str.charAt(num)+""), "");
}
return sb.toString();
} public static void main(String[] args) {
Test t = new Test();
System.out.println(t.game(4));
}
}