Тут пароль на 3 символа, чтобы быстрее понять проблему. Из-за рекурсии мой пароль затирается
Вот пример вывода (соответственно, когда все цифры разные то тут должен быть пароль)
0
0
1
1
2
0
А если цифры сразу разные, то
0
2
1
5Gy
Спасибо
package com.javarush.task.task32.task3204;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.StringWriter;
import java.util.Random;
/*
Генератор паролей
*/
public class Solution {
public static void main(String[] args) throws IOException {
ByteArrayOutputStream password = getPassword();
System.out.println(password.toString());
}
public static ByteArrayOutputStream getPassword() throws IOException {
StringBuilder password = new StringBuilder();
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
Random random = new Random();
for (int i = 0; i < 3; i++) {
int num = random.nextInt(3);
System.out.println(num);
if (num == 0) {
password.append(number());
} else if (num == 1) {
password.append(toLowerCase());
} else if (num == 2) {
password.append(toUpperCase());
}
}
System.out.println();
boolean num = String.valueOf(password).matches("(.*[0-9]+.*)");
boolean az = String.valueOf(password).matches("(.*[a-z]+.*)");
boolean AZ = (String.valueOf(password).matches("(.*[A-Z]+.*)"));
//
// System.out.println(num + " " + az + " " + AZ);
// if (!(num && az && AZ)){
// getPassword();
// }
// if (!String.valueOf(password).matches("(.*[a-z]+.*)(.*[A-Z]+.*)(.*\\d+.*)")){
// if (!String.valueOf(password).matches("(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).+")){
if (!(num && az && AZ)) {
getPassword();
} else {
outputStream.write(String.valueOf(password).getBytes());
return outputStream;
}
return outputStream;
}
public static char toLowerCase() {
Random random = new Random();
return (char) (97 + random.nextInt(122 - 97));
}
public static char toUpperCase() {
Random random = new Random();
return (char) (65 + random.nextInt(90 - 65));
}
public static char number() {
Random random = new Random(57);
return (char) (48 + random.nextInt(57 - 48));
}
}