Stack Overflow на русском Asked on December 2, 2021
В цикле проходит некоторая проверка, но до нужной пора break игнорируется, в чем причина?
var one_words = ['كِتَابُ', 'مِحْبَرَةُ', 'لَوْحُ', 'قَلَمُ', 'كُرَّاسُ', 'نَشَّافَة', 'مِسْطَرَة'];
random_num = Math.floor(Math.random() * one_words.length);
let i;
while (one_words[random_num] == '') {
if (i > 30) {
break;
} else {
random_num = Math.floor(Math.random() * one_words.length);
i++;
}
}
Это отрывок кода, и в другом месте элементам массива приравнивается пустая строка
Иное решение:
while (one_words[random_num] == '' && i < 100)
Но в любом случае интересно, почему предыдущий код не получался?
let i;
Тут в i будет undefined
, а потом
i++
будет NaN
и поэтому break не пройдет.
нужно инициализировать i так
let i = 0;
Answered by eri on December 2, 2021
Ваш код не работает впринципе. Посмотрите на условие, которое вы поставили для работы цикла while one_words[random_num] == ""
, оно не может сработать так как в массиве one_words
не содержится пустых строк.
Если Вы хотите что бы цикл работал, его условие должно возвращать true
.
// скопировал сюда Ваш код, добавив вывод в консоль
// и заменил значения в массиве на латинские символы
// сейчас Вам должно быть видно
// что условие while не срабатывает
// а значение i остается неизменным
const one_words = ["one", "two", "three", "four", "five"]
let random_num = Math.floor(Math.random() * one_words.length)
let i = 0
while (one_words[random_num] === "") {
console.log("in while")
if (i > 30) {
break
} else {
random_num = Math.floor(Math.random() * one_words.length)
i++
}
}
console.log(i)
Так же, для того что бы избежать возможных ошибок, всегда старитесь использовать проверку на строгое соответствие вместо приведения к типу.
Answered by Vasily on December 2, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP