Функция / Do-while для генерации случайных чисел, пока они не будут одинаковыми - PullRequest
0 голосов
/ 31 января 2020

(Javascript) Моя цель - сгенерировать 3 случайных числа, назначенных a, b и c. Я хочу делать это снова и снова, пока ab и c не станут одинаковыми числами, а также будут отслеживать, сколько попыток это займет. Однако единственный результат - моя часть «Ошибка», которую я добавил для отладки. Любые идеи о том, где я мог пойти не так?

    var a = Math.floor(Math.random() * 6) + 1;
    var b = Math.floor(Math.random() * 6) + 1;
    var c = Math.floor(Math.random() * 6) + 1;
    var runs = 0;
function tripleNumbers() {
    while(a!=b && c !=b) {
        a = Math.floor(Math.random() * 6) + 1;
        b = Math.floor(Math.random() * 6) + 1;
        c = Math.floor(Math.random() * 6) + 1;
        runs++;
    }
    if(a == b && a == c) {
        document.write("A: "+a);
        document.write("B: "+b);
        document.write("C: "+c);
        document.write("Total Runs: "+runs);
    }
    else {
        document.write("Error");
    }
}
tripleNumbers();

Ответы [ 2 ]

1 голос
/ 31 января 2020

В то время как l oop, вы должны использовать оператор ИЛИ (||) вместо AND, потому что вы хотите запускать l oop до тех пор, пока любое из неравенств не станет истинным:

while(a!=b || c!=b){/*...*/}

Или отрицание всего выражения и использование положительных проверок равенства:

while(!(a==b && c==b)){/*...*/}
0 голосов
/ 31 января 2020
while(a!=b && c !=b) {

Проблема в том, что ваша логика c закорочена. a != b && c != b говорит, что вы должны выполнить l oop, если оба эти условия истинны.

Однако, если первое условие ложно, второе не оценивается.

Итак, логически, самое большее, что мы можем утверждать после этого условного завершения, это то, что a == b.

Если вы хотите убедиться, что l oop продолжается до тех пор, пока любое значений отличаются, вы должны изменить его, чтобы использовать ИЛИ. Таким образом, для l oop до конца, имеет , чтобы быть истинным, что a == b и c == b.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...