Подскажите, что не так: тестировал раз 50, всегда присутствует и цифра, и латинская заглавная, и латинская строчная. И всегда 8 символов. алгоритм такой: 1. Вычисляю рандомно три числа: колчество цифр, количество строчных букв, количество заглавных букв. 2. Подгоняю рандомно сумму этих трех чисел до 8. 3. Создаю 3 массива char[] - коды цифр, коды строчных букв, коды заглавных букв. 4. Создаю результирующий массив Character[] symbols = new Character[8]; из 8 символов. 5. Заполняю по порядку результирующий массив - 5.1. сначала произвольными цифрами из массива кодов цифр в количестве из 1-го пункта. 5.2. потом произвольными заглавными 5.2. потом произвольным истрочными. 6. Перегоняю этот результирующий массив в колллекцию List<Character> list = Arrays.asList(symbols); и делаю Collections.shuffle(list); 7. Из перемешанной коллекции строю в цикле новый StringBuilder 8. Из этого StringBuilder получаю ByteArrayOutputStream() и возвращаю его.