Ситуация такая. Создал 3 массива - соответствено на цифры и буквы, и один объединненый ( из которого мы и будем брать случайные символы). Если в пароле присутствует хотя бы по 1 элементу из каждого массива то отправляем готовый результат, иначе рекурсим метод пока не получим нужный нам пароль. В идеале все "как бы " работает , если можно так сказать, если нужный пароль генерируетсяс первого раза все ОК. Но если мы не получили нужный пароль с первого раза , то далее по логике идет перезапуск метода пока не будет найден подходящий пароль , вот тут и начинается какая-то белеберда, вообщем метод перезапускается к примеру 5 раз и последнее значение проходящее все условия проверки найдено. Вроде все, осталось его return , но подходя к return он начинает брать все старые (не подходящие значения пароля) и по очереди их листать пока не найдет самое первое и его вот и сделает return. Это отлично будет видно если поставите брекпоинт на 67 и 68 строке.