本帖最后由 迦罗叶 于 2014-2-21 14:09 编辑
这是两种打乱数组中元素的方法,第一种我自己写的,第二种别人写的。第二种我有一步看不懂,就是for循环里的index是随机
取到的值,那如果下次循环又随机到上次那个数,那不是有个数没换吗,求大神指点
import java.util.*;class Demo2{ public static void main(String[] args) { int[] arr={1,2,3,4,5,6,7}; //将这个数组打乱得到一个新的数组 int a =0;//记录新数组的角标 int[] newArr = new int[arr.length]; boolean[] base = new boolean[arr.length];//定义一个布尔类型的数组,因为初始值都是false do { Random r = new Random(); int temp = r.nextInt(arr.length);//随机从0<= <arr.length中取一个值 if(!base[temp])//作为入口,可以进去,控制如果下次取到就进不来 { base[temp] = true; newArr[a++] = arr[temp];//将arr数组中的元素随机赋给newArr } } while (a<arr.length); System.out.println(Arrays.toString(newArr)); } pubic static void main(String[] args) { int arr ={1,2,3,4,5,6,7}; Random rd = new Random();//建立一个打乱数组的方法 for (int x =0;x<arr.length-1 ;x++ ) { int index = r.nextInt(arr.length);//从arr数组中随机挑选一个角标值 //就是这一步开始迷糊index怕下一次又随机给到上个数????? int temp = 0;//定义一个第三方变量作为临时交换储存位置 temp=arr[x]; arr[x] = arr[index]; arr[index] = temp; } System.out.println(Arrays.toString(arr)); }}
|