黑马程序员技术交流社区

标题: 哈尔滨校区--技术交流--随机数 [打印本页]

作者: 屈璐璐    时间: 2016-2-16 23:09
标题: 哈尔滨校区--技术交流--随机数


/*
*     0-99共100个整数,放到一个数组中,位置是随机的
*    将其中一个数37,挑出来,换成不是这个数字的另一个数45
*    有一个数字是重复的,还有一个数字是没有的
*    将这个重复的数字找出来,用最快的方式
*/
public class Demo1 {
    public static void main(String[] args) {

        //定义一个100长度的数组
        int[] arr = new int[100];

        //从1-100初始化
        for (int i = 0; i <100; i++) {
            arr[i]=i;
        }

        //把37换成45,那么这100个数中,37是没有的,45是重复的
        arr[37]=45;

        //打乱数组的里面的值的位置,让位置随机
        changePosition(arr);



        //定义一个临时数组,那么里面的初始数都是0
        int[] temp = new int[arr.length];

        //遍历数组arr,以arr里面的值作为临时数组temp的索引
        for(int i = 0;i<arr.length;i++){
            //让临时数组temp对应的值都加1 ,这时候 temp的索引是0-99,temp对应索引37位置上就是0,对应45位置上就是2
            temp[arr[i]]++;

            //数值是2的则重复,因为 temp的索引45位置上加了两次
            if(temp[arr[i]]==2){
                System.out.println(arr[i]+"重复");
            }
        }

    }

    /**
     * 打算数组的顺序
     * @param arr    需要打乱顺序的数组
     */
    public static void changePosition(int[] arr) {

        Random random = new Random();
        int length = arr.length;
        for(int index=length-1; index>=0; index--) {

            //从0到index处之间随机取一个值,跟index处的元素交换

            exchange(arr, random.nextInt(index+1), index);

        }

    }



    /**
     * 交换数组中的两个数的位置
     * @param arr     需要交换位置的数组
     * @param p1    被交换位置的索引
     * @param p2    被交换位置的索引
     */
    public static void exchange(int[] arr, int p1, int p2) {

        int temp = arr[p1];

        arr[p1] = arr[p2];

        arr[p2] = temp;

    }
}
作者: 洋葱头头    时间: 2016-2-16 23:19
帮你顶一个
作者: mm46468648    时间: 2016-2-18 20:17
帮顶{:2_36:}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2