в строке 61-62 вылезают не нужные символы, но я не могу понять почему же?
sb.append((char)((int)(10 + (Math.random() * 35) + 55)));
sb.append((char)((int)(36 + (Math.random() * 61) + 61)));
package com.javarush.task.task32.task3204;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
/*
Генератор паролей
*/
public class Solution {
public static void main(String[] args) {
ByteArrayOutputStream password = getPassword();
System.out.println(password.toString());
}
public static char getRandom() {
// Создаем функцию, которая случайным образом генерирует букву (нижний или верхний регистр) или число (0-9) с использованием ASCII
// //'0' - '9' => 48-57 in ASCII
// //'A' - 'Z' => 65-90 in ASCII
// //'a' - 'z' => 97-122 in ASCII
// Мы умножаем Math.random () на 62, потому что есть 26 строчных букв, 26 прописных букв и 10 цифр, а также 26 + 26 + 10 = 62
// Это случайное число имеет значения от 0 (включительно) до 62 (исключая)
// 0-61 включительно = все возможные значения rand
// 0-9 включительно = 10 возможных чисел / цифр
// 10-35 включительно = 26 возможных заглавных букв
// 36-61 включительно = 26 возможных строчных букв
// Если rand находится между 0 (включительно) и 9 (включительно), мы можем сказать, что это число / цифра
// Если rand находится между 10 (включительно) и 35 (включительно), мы можем сказать, что это заглавная буква
// Если rand находится между 36 (включительно) и 61 (включительно), мы можем сказать, что это строчная буква
int rand = (int)(Math.random()*62);
int ascii = 0;
if(rand <=9) {
// Число (48-57 в ASCII)
// Чтобы преобразовать из 0-9 в 48-57, мы можем добавить 48 к rand, потому что 48-0 = 48
// Таким образом, rand = 0 => number = 48 => '0'
ascii=48+rand;
}
else if(rand >= 10 && rand <=35) {
// Заглавная буква (65-90 в ASCII)
// Чтобы преобразовать 10-35 в 65-90, мы можем добавить 55 к rand, потому что 65-10 = 55
// Таким образом, rand = 10 => uppercase = 65 => 'A'
ascii=55+rand;
}
else if(rand >= 36 && rand <=61) {
// Строчная буква (97–122 в ASCII)
// Чтобы преобразовать 36-61 в 97-122, мы можем добавить 61 к rand, потому что 97-36 = 61
// Таким образом, rand = 36 => lowercase = 97 => 'a'
ascii=61+rand;
}
return (char) ascii;
}
public static ByteArrayOutputStream getPassword() {
StringBuilder sb = new StringBuilder();
sb.append((char)((int)(Math.random() * 10) + 48));
sb.append((char)((int)(10 + (Math.random() * 35) + 55)));
sb.append((char)((int)(36 + (Math.random() * 61) + 61)));
System.out.println(sb);
for (int i = 0; i < 5; i++) {
sb.append(getRandom());
}
List<Character> chars=sb.toString().chars().mapToObj(c -> new Character((char) c)).collect(Collectors.toList());
Collections.shuffle(chars);
StringBuilder newSb = new StringBuilder();
chars.forEach(c -> newSb.append(c));
ByteArrayOutputStream ba=new ByteArrayOutputStream();
try {
ba.write(newSb.toString().getBytes());
} catch (IOException e) {
e.printStackTrace();
}
return ba;
}
}