位运算应用
案例:输入一串数组并赋值,赋值的范围为1~arr.length-1,然后生成一个随机数(1 ~ arr.length-1),将生成的随机数放在arr[arr.length-1] ,生成一个随机位置,将数组最后一位和生成的随机位置所在的数组交换,最后找出重复的那个数组。
public class FindRepetition {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("-------------请输入数组的长度------------");
int N = scanner.nextInt()+1;
int[] ints = new int[N];
//solution01(ints);
solution02(ints);
}
public static void solution01(int ints[]){
int N = ints.length;
for (int i = 0; i < ints.length-1; i++) {
ints[i]=i+1;
}
Random random = new Random();
int ran = random.nextInt(ints.length - 1)+1;
ints[ints.length-1]=ran;
int index = new Random().nextInt(N);
//需要交换
changePositionByIndex(ints,index);
print(ints,5);
shuffleArr(ints);
print(ints,5);
int temp=0;
for (int i = 0; i < ints.length; i++) {
temp = temp^ints[i];
for (int j = 0; j < ints.length - 1; j++) {
temp = temp ^ (j+1);
}
}
System.out.println(temp);
}
public static void solution02(int ints[]){
System.out.println("----------------------");
int N = ints.length;
for (int i = 0; i < ints.length-1; i++) {
ints[i]=i+1;
}
Random random = new Random();
int ran = random.nextInt(ints.length - 1)+1;
ints[ints.length-1]=ran;
int index = new Random().nextInt(N);
//需要交换
changePositionByIndex(ints,index);
print(ints,6);
int[] helper = new int[ints.length - 1];
for (int i = 0; i < helper.length+1; i++) {
helper[ints[i]-1]++;
}
for (int i = 0; i < helper.length; i++) {
if(helper[i]==2){
System.out.println(ints[i]);
}
}
}
public static void changePositionByIndex(int arr [] , int index){
for (int i = 0; i < arr.length -1 ; i++) {
int temp = arr[arr.length-1];
arr[arr.length-1]=arr[index];
arr[index]=temp;
}
}
public static void print(int arr [],int columns){
for (int i = 0; i < arr.length; i++) {
if(i==0 || i==arr.length-1){
if(i==0){
System.out.print("["+arr[i]+';');
}else {
System.out.print(arr[i]+"]"+"\n");
}
}else {
if(i%columns == 0){
System.out.print("\n"+arr[i]+";");
}else {
System.out.print(arr[i]+";");
}
}
}
}
public static void shuffleArr(int arr []){
int len = arr.length;
for(int i = 0;i < len; i++){
int currentRandom = new Random().nextInt(len-1);
int current = arr[i];
arr[i] = arr[currentRandom];
arr[currentRandom] = current;
}
}
}
运行结果: