对一个一维数组进行随机赋值,然后筛选出重复的元素,并对重复的元素进行重新赋值,保证一维数组所有元素的值互不相同?
用java该如何写这个算法啊?

解决方案 »

  1.   

    打乱顺序,和一直随机产生,也可能会产生重复的啊,这个方法不可靠。
    我觉得应该对这个数组进行逐一遍历的对比,发现重复的,用不等于重复值的随机数再次进行赋值,应该就可以了吧,前辈们给指教指教?
    //先对该数组进行赋值
    for(int i = 0;i < 10;i++) {
    ball[i] = (int)(Math.random() * 33 + 1);
    }

    //进行重复检查,并重新赋值
    for(int i = 0;i < 10;i++) {
    for(int j = i + 1;j < 10;j++) {
    if(ball[i] == ball[j]) {
    int temp = (int)(Math.random() * 33 + 1);
    while(ball[i] == temp) {
    temp = (int)(Math.random() * 33 + 1);
    }
    ball[i] = temp;
    }
    }
    System.out.println(ball[i]);
    }
      

  2.   

    提供一个思路吧!
    1. 假设一维数据是int[]类型,写一个方法,该方法以int(判断是否出现重复的元素),int[](是否重复出现该元素的数组)为参数,再定义一个计数器,判断前者是否在后者中出现次数是否超过2次,将第二、三.....次出现的下标记住,保存到新建的数组中,返回这个新数组。
    2. 将需要判断的数组每个元素都调用这个方法判断一次,每判断一次,修改那些重复的值。缺陷:不排除修改值后,随机生成数字,出现重复的情况。