int [] seed = {0,2,3,4,5,6,7,8,9....99}; int [] ranArr = new int [100]; Random ran = new Random(); for(int i = 0 ; i<seed.length ; i++){ int j = ran.nextInt(seed.length-i); ranArr [i] = seed [j]; seed [j] = seed [seed.length-1-i]; System.out.println ("ranArr[" + i + "]" + ":" + ranArr[i]); } } }
记得Thinking in java中有这个算法的 BRUCE写了好些个这样的辅助类来帮助演示集合的。大家可以找找
这个方法很好。。顶一下import java.util.*;public class lihan{
public static void main(String[] args) { int[] seed=new int[100]; for(int k=0;k<100;k++) { seed[k]=k; } int [] ranArr = new int [100]; //定义目标数组 Random ran = new Random(); for(int i = 0 ; i <seed.length ; i++){ int j = ran.nextInt(seed.length-i); //任意取数组的一个下标,这里length-i写得很好 ranArr [i] = seed [j]; //将取到的下标对应的具体元素复制给目标数组 seed [j] = seed [seed.length-1-i]; //将原数组最后一个元素赋值给上面被取下标位置 System.out.print (ranArr[i]+" "); //输出目标数组 } } }
三楼的你这个赋值也太那个了! int [] seed = {0,2,3,4,5,6,7,8,9....99}; 我觉得一楼的有搞头。set可以避免重复。从set里放进数组
这是我想到其中最简单的方法。你看看 import java.util.Random;public class Test { /* * 问题 各位大哥大姐,帮帮忙!写个一个数组, * 0-99的不重复乱序排列 用数组写哦 我只知道用2个for循环,但是我就做不出来 */ public static void main(String[] args) { int[] number = new int[100];// 存储 0 到 99 的数 // 初始化 for (int i = 0; i < number.length; i++) { number[i] = i; } int length = number.length;// 数组长度 for (int i = length; i > 1; i--) swap(number, i - 1, new Random().nextInt(i)); // 将排序后的 number 数组打印出来 for (int i = 0; i < number.length; i++) { System.out.println(number[i]); } } private static void swap(int[] arr, int i, int j) { int tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; } }
顶一下 随便实现下 List<Integer> RandomNumList = new ArrayList<Integer>();public void getRandomNum(int n){
Random r = new Random(); boolean b = true; while(b){ int temp = r.nextInt(n); if(!RandomNumList.contains(temp)) RandomNumList.add(temp); if (RandomNumList.size() == n) b = false;
然后把这个HashSet再赋值给你需要的那个数组,应该就可以了。
public class Randoms {
public static void main(String[] args) {
int [] seed = {0,2,3,4,5,6,7,8,9....99};
int [] ranArr = new int [100];
Random ran = new Random();
for(int i = 0 ; i<seed.length ; i++){
int j = ran.nextInt(seed.length-i);
ranArr [i] = seed [j];
seed [j] = seed [seed.length-1-i];
System.out.println ("ranArr[" + i + "]" + ":" + ranArr[i]);
}
}
}
BRUCE写了好些个这样的辅助类来帮助演示集合的。大家可以找找
public static void main(String[] args) {
int[] seed=new int[100];
for(int k=0;k<100;k++)
{
seed[k]=k;
}
int [] ranArr = new int [100]; //定义目标数组
Random ran = new Random();
for(int i = 0 ; i <seed.length ; i++){
int j = ran.nextInt(seed.length-i); //任意取数组的一个下标,这里length-i写得很好
ranArr [i] = seed [j]; //将取到的下标对应的具体元素复制给目标数组
seed [j] = seed [seed.length-1-i]; //将原数组最后一个元素赋值给上面被取下标位置
System.out.print (ranArr[i]+" "); //输出目标数组
}
}
}
int [] seed = {0,2,3,4,5,6,7,8,9....99};
我觉得一楼的有搞头。set可以避免重复。从set里放进数组
这是我想到其中最简单的方法。你看看
import java.util.Random;public class Test { /*
* 问题 各位大哥大姐,帮帮忙!写个一个数组,
* 0-99的不重复乱序排列 用数组写哦 我只知道用2个for循环,但是我就做不出来
*/
public static void main(String[] args) { int[] number = new int[100];// 存储 0 到 99 的数
// 初始化
for (int i = 0; i < number.length; i++) {
number[i] = i;
} int length = number.length;// 数组长度
for (int i = length; i > 1; i--)
swap(number, i - 1, new Random().nextInt(i)); // 将排序后的 number 数组打印出来
for (int i = 0; i < number.length; i++) {
System.out.println(number[i]);
}
} private static void swap(int[] arr, int i, int j) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
顶一下 随便实现下
List<Integer> RandomNumList = new ArrayList<Integer>();public void getRandomNum(int n){
Random r = new Random();
boolean b = true;
while(b){
int temp = r.nextInt(n);
if(!RandomNumList.contains(temp))
RandomNumList.add(temp);
if (RandomNumList.size() == n)
b = false;
}
}
我个人觉得这个想法蛮好 就是效率不是很高啊 完全看RP
不过其实么 也是个好办法 只要n不是一个非常大的数
public class random{
public static void main(String[] args){
int[] num = new int[100];
for(int i=0; i<num.length;i++){
num[i] = (int) (Math.random()*100);
for(int j=0; j<i;j++){
if(num[i] == num[j]){
i--;
break;
}
}
}
Arrays.sort(num);//数组排序
System.out.println("随机数值:");
for(int x:num)
System.out.print( x +" ");
System.out.println();
}
}