Поэтому я пытаюсь создать три значения от 1 до 3, которые будут отличаться при каждой загрузке страницы. Он отлично работает, когда я открываю страницу в первый раз, но всякий раз, когда я пытаюсь перезагрузить или отправить свою форму, страница останавливается, и она застревает при загрузке. Любая помощь высоко ценится!
function uniqueAnswerId(){
var rand = (Math.random() * 3.4);
while (Math.round(rand) == 0) {
var rand = (Math.random() * 3.4);
}
return (Math.round(rand));
}
var answerId1 = uniqueAnswerId();
function uniqueAnswerId2(){
var rand2 = (Math.random() * 3.4);
while (answerId1 == Math.round(rand2) || Math.round(rand2) == 0) {
var rand2 = (Math.random() * 3.4);
}
return (Math.round(rand2));
}
var answerId2 = uniqueAnswerId2();
function uniqueAnswerId3(){
var rand3 = (Math.random() * 3.4);
while (answerId1 == Math.round(rand3) || answerId2 == Math.round(rand3)){
while (Math.round(rand3) == 0){
var rand3 = (Math.random() * 3.4);
}
}
return (Math.round(rand3));
}
var answerId3 = uniqueAnswerId3();
console.log("AnswerIds: " + (answerId1) + ", " + (answerId2) + ", " + (answerId3))
3 ответа
Ваш 3-й цикл while должен выглядеть следующим образом: «||» в вашем состоянии вместо совершенно нового цикла while.
function uniqueAnswerId3(answerId1, answerId2){
var rand3 = (Math.random() * 3.4);
while (answerId1 === Math.round(rand3) || answerId2 === Math.round(rand3) || Math.round(rand3)===0){
rand3 = (Math.random() * 3.4);
}
return (Math.round(rand3));
}
Взгляните на эту часть вашего кода:
while (answerId1 === Math.round(rand3) || answerId2 === Math.round(rand3)){
while (Math.round(rand3) === 0){
rand3 = (Math.random() * 3.4);
}
}
Посмотрим, что произойдет со следующими значениями:
- answerId1 = 1
- answerId1 = 2
- Math.round (rand3) = 1
В этом случае у вас будет:
while (true){
while(false){
never_executed();
}
}
Таким образом, он будет повторяться до бесконечности во внешнем «время».
Чтобы избежать этого, вы можете просто сделать то, что говорит @Nakolas Bakolias, добавить еще один «||» в вашем состоянии вместо совершенно нового цикла
Я считаю, что у вас есть бесконечный цикл. Вот скрипка для исправления вашего кода.
Изменения: используйте «===» вместо «==»
Функция Hoisting выполняет эти функции до объявления переменных, что означает, что ссылка на них внутри функций не работает. Добавлены параметры для принятия необходимых аргументов.
https://jsfiddle.net/80xdmsjL/
function uniqueAnswerId(){
var rand = (Math.random() * 3.4);
while (Math.round(rand) === 0) {
rand = (Math.random() * 3.4);
}
return (Math.round(rand));
}
var answerId1 = uniqueAnswerId();
function uniqueAnswerId2(answerId1){
var rand2 = (Math.random() * 3.4);
while (answerId1 === Math.round(rand2) || Math.round(rand2) === 0) {
rand2 = (Math.random() * 3.4);
}
return (Math.round(rand2));
}
var answerId2 = uniqueAnswerId2(answerId1);
function uniqueAnswerId3(answerId1, answerId2){
var rand3 = (Math.random() * 3.4);
while (answerId1 === Math.round(rand3) || answerId2 === Math.round(rand3)){
while (Math.round(rand3) === 0){
rand3 = (Math.random() * 3.4);
}
}
return (Math.round(rand3));
}
var answerId3 = uniqueAnswerId3(answerId1, answerId2);
console.log("AnswerIds: " + (answerId1) + ", " + (answerId2) + ", " + (answerId3))
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.