java数组随机数不能重复如何解决

56次阅读
没有评论

共计 1428 个字符,预计需要花费 4 分钟才能阅读完成。

要解决 Java 数组随机数不能重复的问题,可以使用以下方法:

  1. 使用 java.util.Random 类生成随机数,并将生成的随机数存入 Set 集合中。由于 Set 集合不允许重复元素,因此可以保证生成的随机数不重复。然后,将 Set 集合转换为数组。
import java.util.HashSet;
import java.util.Random;
import java.util.Set;

public class RandomArray {public static void main(String[] args) {int[] array = generateRandomArray(10, 1, 100);
        for (int num : array) {System.out.println(num);
        }
    }

    public static int[] generateRandomArray(int length, int min, int max) {if (length > (max - min + 1)) {throw new IllegalArgumentException(" 生成不了指定范围内的不重复随机数!");
        }
        
        Random random = new Random();
        Set<Integer> set = new HashSet<>();
        
        while (set.size() < length) {int randomNum = random.nextInt(max - min + 1) + min;
            set.add(randomNum);
        }
        
        int[] array = new int[length];
        int index = 0;
        for (int num : set) {array[index++] = num;
        }
        
        return array;
    }
}
  1. 另一种方法是使用 Fisher-Yates 算法,该算法通过交换数组元素的位置来生成不重复的随机数。
import java.util.Random;

public class RandomArray {public static void main(String[] args) {int[] array = generateRandomArray(10, 1, 100);
        for (int num : array) {System.out.println(num);
        }
    }

    public static int[] generateRandomArray(int length, int min, int max) {if (length > (max - min + 1)) {throw new IllegalArgumentException(" 生成不了指定范围内的不重复随机数!");
        }
        
        int[] array = new int[length];
        Random random = new Random();
        
        for (int i = 0; i < length; i++) {int randomIndex = random.nextInt(max - min + 1 - i) + i;
            array[i] = randomIndex;
            
            int temp = array[i];
            array[i] = array[randomIndex];
            array[randomIndex] = temp;
        }
        
        for (int i = 0; i < length; i++) {array[i] = array[i] + min;
        }
        
        return array;
    }
}

这两种方法都是通过生成随机数并存入数组中,保证随机数不重复。第一种方法使用了 Set 集合,第二种方法使用了 Fisher-Yates 算法。可以根据具体的需求选择使用哪种方法。

丸趣 TV 网 – 提供最优质的资源集合!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-13发表,共计1428字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)