题目分析:
1-1000这一千个数中,有唯一一个元素值重复:共有1001个元素值,其中只有一对元素值重复需求实现
如何获取1-1000这1001个元素值 通过遍历赋值数组法来获取有规律的数据:1-1000依次遍历赋值给arr[i],数组长度为N获取唯一重复的元素值:通过随机数类生成指定范围内的指定类型的随机数 形式一(直接调用数学函数Math()):(int)Math.random()*N+1得到一个[0,N]的整型随机数 形式二(调用util包中的Random类): 第一步:导包 import java .util.Random(); 第二步:创建对象 Random r = new Random(); 第三步:获取随机数 int number = r.nextInt(N);(**数据范围[0.N)**) 形式二的简化版:int number = new Random().nextInt(N)----生成一个[0,N)的随机整数 Math.random()函数与Random类的区别 区别一:返回值类型不同,Math.random()返回值类型为double,需要强制转化为int,而Random类返回值类型为int型,不需要强制转化 区别二:返回值范围不同,Math.random()生成的数据范围为[0,1)的浮点数,得到目标范围的整型数据需要(int)Math.random()*N+1,这样就生成了整型的[0,N]的数据(N∈[1,n],n为自然数),Random类生成的数据范围是直接生成一个[0,N)的随机整数---int number = new Random().nextInt(N) 如何获取一个范围在1-1000的重复数据 arr[arr.length-1] = (int)(Math.random()*(N-1)+1,N=1001,则数据范围为[0,1000]arr[arr.length-1]= new Random().nextInt(N-1)+1,N=1001,数据范围同样为[0,1000] 如何得到一组唯一成对的数据 将得到的重复数据arr[arr.length-1]与前一千个不重复数据中的一个交换 生成一个范围为[0,1000]的随机数作为数组索引将arr[arr.length-1]与arr[index]做交换交换用swap函数 如何找出唯一成对的数据 使用位运算中的异或^运算:A ^ A =0 ,B ^ B = 0,成对数据异或 ^ 会被消除如 A ^ A ^ C ^ B ^ B = C package oj; //找出唯一成对的数 import java.util.Random; public class RepeatArray { public static void main(String[] args) { //定义数组长度 int N = 1001; int []arr = new int [N]; //遍历填充数组,又名遍历赋值数组法 for(int i = 0;i < arr.length-1;i++) { arr[i] = i + 1; } //生成一个随机数组值,范围[0,N-1],N = 1001 arr[arr.length-1] = new Random().nextInt(N-1)+1; System.out.println(arr[arr.length-1]); //生成一个随机数作为数组索引,范围为[0,1000] int index = new Random().nextInt(N); //输出数组索引 System.out.println(index); //交换数据:将重复的数据与生成的随机索引对应的数组值进行交换 swap(arr,index); //输出交换后的数组 printArray(arr); /* 进行异或 ^预算,消除成对的数据 使用位运算中的异或^运算:A ^ A =0 ,B ^ B = 0,成对数据异或 ^ 会被消除如 A ^ A ^ C ^ B ^ B = C */ int x = 0; for(int i = 0;i < arr.length-1;i++) { x = x^(i + 1); } for(int i = 0;i < arr.length;i++) { x = arr[i]^x; } System.out.println(); //输出成对的数 System.out.println(x); } //将随机数组值与随机索引对应值交换 public static void swap(int arr[],int index) { int temp = 0; temp = arr[arr.length-1]; arr[arr.length-1] = arr[index]; arr[index] = temp; } //遍历输出数组 public static void printArray(int []arr) { System.out.print("["); for(int i = 0;i < arr.length;i++) { System.out.print(arr[i]); if(i != arr.length-1) { System.out.print(","); } } System.out.println("]"); } }