В сообщении хочу вывести сгенерированый пароль. От меня программа ждёт цифру определяющую количество символов в нём. С генерацией пароля проблем не вижу, но результат, по моей задумке дложен быть передан от функции к функции через return
public class SITM {
public static void main(String[] args) throws IOException {
System.out.println(getPass());
}
public static int getPass() throws IOException { //здесь будем "делать" пароль
Random random = new Random(); // он выбирает, случайным образом индекс символа из масива
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); // с его помощью я укажу желаемую длину пароля
char[] symbolsArray = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '~', '!', '@', '#', '$' , '%', '^', '&', '*', '(', ')', '|', '}', '{', ':', '?'};
int longOfTHEpass = Integer.parseInt(reader.readLine()); // переменная отвественная за длину а значит указывает количество интераций цикла
int y = 0; // в неё я хочу сохранить сгенерированый результат, она мне необходима вне цикла поэтому объявляю её заранее
for (int p = 1; p <= longOfTHEpass; p ++){ // заходим в цикл
int r = random.nextInt(symbolsArray.length); // складываем в переменную символы из массива с рандомными индексами
y = symbolsArray[r]; // копируем результат в заранее определённую переменную
}
return y; // хочу возвратить результат
}
}
Программа не "падает" Но на введёную мней цифру выводит не ожидаемый результат. Я жду строку из символов а получаю только цифры. Как мне получить мой пароль?
спасибо проявившим беспокойство по поводу моего вопроса!
проимер кода без вызова одной функции другой функцией, прямой так сказать:
public class CTFP {
static final Random myRandNumb = new Random();
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
char[] symbolsArray = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '~', '!', '@', '#', '$' , '%', '^', '&', '*', '(', ')', '|', '}', '{', ':', '?'};
int a = Integer.parseInt(reader.readLine());// long of the password
System.out.print(stringStore.plzYourPas);
for (int i = 0; i < a; i ++){
int y = myRandNumb.nextInt(symbolsArray.length);
System.out.print( symbolsArray[y]);
}
System.out.println("");
}
}
так что , как видите переменная "у" в этом случае не обесценивается.
Если вы хотите генерировать строку, то и генерируйте строку, а не число.
В цикле вы вообще приравниваете y
каждый раз к новому случайному значению, что обесценивает все предыдущие итерации.
Правильный код (со StringBuilder
):
final static Random random = new Random();
final static char[] symbolsArray = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '~', '!', '@', '#', '$' , '%', '^', '&', '*', '(', ')', '|', '}', '{', ':', '?'};
public static String getPass() {
int lengthOfThePassword = new Scanner(System.in).nextInt();
StringBuilder password = new StringBuilder();
for (int p = 0; p < lengthOfThePassword; p++)
password.append(symbolsArray[random.nextInt(symbolsArray.length)]);
return password.toString();
}
Или с char[]
:
public static String getPass() {
char[] password = new char[new Scanner(System.in).nextInt()];
for (int i = 0; i < password.length; i++)
password[i] = symbolsArray[random.nextInt(symbolsArray.length)];
return new String(password);
}
А вообще не хорошо ставить сканер внутрь метода, лучше сделать метод getPass(int length)
.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Помогите составить регулярное выражение, для определения страны в круглых скобкахНапример даны строки:
Имеется приложение с разными контролами в которые можно вводить текстХочу что бы когда активировалась клавиатура скрыть курсор
У меня есть класс ClassNameНапример, я обращаюсь к нему ClassName