Данное диагностическое правило выявляет случаи использования псевдорандомного генератора случайных чисел, которые могут привести к недостаточно случайному распределению или предсказуемости генерируемого числа.
Случай 1
Создание нового объекта типа 'Random' каждый раз, когда требуется случайное значение. Это неэффективно и может привести к получению чисел, которые не являются достаточно случайными, в зависимости от JDK.
Рассмотрим пример:
public void test() { Random rnd = new Random(); }
Для большей эффективности и случайности распределения создайте один экземпляр класса 'Random', сохраните его и используйте повторно.
static Random rnd = new Random(); public void test() { int i = rnd.nextInt(); }
Случай 2
Анализатор обнаружил подозрительный код, инициализирующий генератор псевдослучайных чисел константным значением.
public void test() { Random rnd = new Random(4040); }
Числа, сгенерированные таким генератором, можно предугадать — они будут воспроизводиться снова и снова при каждом запуске программы. Чтобы этого избежать, не стоит использовать константное число. К примеру, можно воспользоваться текущим системным временем:
static Random rnd = new Random(System.currentTimeMillis()); public void test() { int i = rnd.nextInt(); }
Данная диагностика классифицируется как: