Задача вывести массив двузначных чисел, у которых совпадают десятки и единицы в каждой последующей итерации (то есть 29-62-36).
Этот код работает некорректно, это просто случайные числа
let arr=[]
let length = +prompt("введите число")
let ten
let union
let num
let i = 2
num = Math.floor(Math.random() * (99 - 10 ) + 10)
arr.push(num)
while (i<=length){
ten=Math.floor(num / 10)
num = Math.floor(Math.random() * (99 - 10 ) + 10)
union= num% 10
if(union===ten){
arr.push(num)
i++
}
}
alert(arr)
Но если добавить вложенный цикл while, то все работает:
let arr=[]
let length = +prompt("введите число")
let ten
let union
let num
let i = 2
num = Math.floor(Math.random() * (99 - 10 ) + 10)
arr.push(num)
while (i<=length){
ten=Math.floor(num / 10)
union=-1
while(union!=ten){
num = Math.floor(Math.random() * (99 - 10 ) + 10)
union= num% 10}
if(union===ten){
arr.push(num)
i++
}
}
alert(arr)
Почему?
В первом варианте вижу последовательность так?
1) зашли в цикл, значение ten берется из внешней переменной num/
2)создаем новое рандомное число
3) выделяем единицу из нового num
4) сравниваем значение ten (из внешней переменной) и union из нового num
//5) заходим снова в цикл
6) уже берем ten из прошлого внутрицикличного значения ten
7) переназначаем ten
8) узнаем из нового ten новый union
9) сравниваем ten, сохранивший значения еще с первой итерации и сравниваем с новым union
10......И далее так по кругу пока цикл не завершится.
Но как видно на практике, это работает нет так. Почему?
Зачем во втором варианте создается еще один цикл, и зачем изначально значение union=-1, что бы каждый раз попадать во вложенный цикл....?