@Borankin

Почему не работает генератор случайных строк на JavaScript?

Здравствуйте.
Начал изучать JavaScript по книге "JavaScript для детей" (автор - Ник Морган).
Никак не разберусь с одной из задач этой книги.

#2. Генератор случайных строк
Напишите генератор случайных строк. Для этого вам понадобится строка со всеми буквами алфавита:
var alphabet = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";

Чтобы выбирать из этой строки случайную букву, можно использовать примерно такой код:
Math.floor(Math.random() * alphabet .length)
Так вы получите случайный индекс в строке. Затем, воспользовавшись квадратными скобками, можно получить символ по этому индексу.
Начните создавать случайную строку с пустой строки (var randomString = ""). Затем добавьте цикл while и при каждом его повторе добавляйте в строку новый случайный символ — до тех пор, пока длина строки randomstring не превысит шесть символов. Добавлять символ в конец строки можно с помощью оператора +=. После того как цикл закончит работу, выведите получившуюся строку в консоль.


Сначала я написал так:
var alhpabet = "абвгдеёжзийклмнопрстуфчцчшщъыьэюя";
var randomLetter = alhpabet[Math.floor(Math.random() * alhpabet.length)];
var randomString = "";
while (randomString.length < 6) {
  randomString += randomLetter; 
}
console.log(randomString);

На выходе получаю что-то типа: "ьььььь" или "нннннн", т.е. 6 одинаковых букв - а должны быть все разные.

Если написать код немного по другому (заменив в цикле переменную randomLetter на присвоенное ей значение - alhpabet[Math.floor(Math.random() * alhpabet.length)]):
var alhpabet = "абвгдеёжзийклмнопрстуфчцчшщъыьэюя";
var randomString = "";
while (randomString.length < 6) {
  randomString += alhpabet[Math.floor(Math.random() * alhpabet.length)]; 
}
console.log(randomString);

на выходе получаю, то что надо, например, "епйнчй" или "ковбзё".

Ну никак не пойму, почему в первом случае код не работает должным образом? По сути написано одно и то же.
  • Вопрос задан
  • 592 просмотра
Решения вопроса 2
@StockholmSyndrome
не одно и то же

в первом случае буква генерируется один раз в месте объявления переменной
var randomLetter = alhpabet[Math.floor(Math.random() * alhpabet.length)];

во втором случае буква генерируется на каждой итерации цикла
while (randomString.length < 6) {
  randomString += alhpabet[Math.floor(Math.random() * alhpabet.length)]; 
}
Ответ написан
Stalker_RED
@Stalker_RED
Вот вы выбираете случайную букву. Один штука. Записываете ее в переменную
var randomLetter = ...

Потом сколько-то раз складываете ее в строку. И у вас получается строка из повторяющихся букв. Внезапно.

Если хотите из разных - придется там в цикле каждый раз новую букву выбирать.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы