Кто-нибудь может сказать мне, почему этот цикл длится вечно?

#javascript #loops

Вопрос:

 let dice = Math.floor(Math.random() * 6)   1;
while (dice !== 6) {
    console.log(You rolled a ${dice}); 
}
 

Пожалуйста, объясните этот код?

Комментарии:

1. Значение dice устанавливается только один раз, перед циклом.

Ответ №1:

Вам просто нужно назначить dice значение в while цикле, пока dice !== 6

 let dice = Math.floor(Math.random() * 6)   1;
while (dice !== 6) {
  console.log(`You rolled a ${dice}`);
  dice = Math.floor(Math.random() * 6)   1;
} 

Ответ №2:

Сначала и только один раз вы генерируете случайное число ( dice ).

Если это число равно 6, оно пропускает цикл while.

Если это не 6, он входит в цикл while.

Значение dice не меняется внутри цикла while, поэтому оно бесконечно повторяется.

Ответ №3:

вы никогда не выбирали следующие случайные кости. включите оператор dice в свой цикл, чтобы у вас было новое значение переменной dice, иначе она всегда будет иметь одно и то же значение.

Ответ №4:

Вы устанавливаете значение кубика только один раз в начале, если вы получите число, отличное от 6, то луп будет повторяться вечно, попробуйте поставить

Математический этаж(математический случайный() * 6) 1

в качестве условия для цикла while, тогда вы получите желаемый результат

Ответ №5:

Значение dice устанавливается только один раз, перед циклом. Переменная сохраняет свое значение, если вы явно не измените ее.

Что вы могли бы сделать, так это создать небольшую функцию для броска костей. Это избавляет вас от необходимости вводить код в функции более одного раза:

 let dice = () => {return Math.floor(Math.random() * 6)   1;}

roll = dice(); /* Set the initial value of roll */
while (roll !== 6) {
    console.log(`You rolled a ${roll}`);
    roll = dice(); /* Set the value for the next time round in the loop */
}
 

Обратите внимание, что вызов функции содержит круглые скобки () , чтобы заставить ее оценить функцию.