показать случайное число <0,8 не работает должным образом - PullRequest
1 голос
/ 04 августа 2020

Привет, я новичок в JS, поэтому я попытался сделать это, я сделал это, чтобы проверить случайную функцию, и я хочу отображать только случайные числа ниже 0,8, но иногда он показывает выше 0,8 также более одного раза подряд, как исправить? Это мой первый пост здесь, извините, если я сделал что-то не так. Спасибо. :)

function rn() {
    var a = Math.random()
    return a
}

function writerandon() {
    var x = 0

    while (x < 100) {
        if (rn() < 0.8) {
            document.write(rn() + "<br>")
        }

        if (rn() > 0.8) {
            x = 100
        }

        x++
    }
}
//
document.getElementById("11").innerHTML = writerandon()
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>exp</title>
</head>

<body id="bd">   

<h1 id="11"></h1>

</body>

<script src="exp.js"></script>
</html>

Ответы [ 3 ]

6 голосов
/ 04 августа 2020

Ваш код выполняет два вызова случайных чисел, каждый из которых может иметь разные значения. Исправление заключается в использовании else для обеспечения срабатывания только одной ветки:

    let n = Math.random();
    if (n < 0.8) {
        document.write(n + "<br>")
    }
    else {
        x = 100
    }

Тот факт, что вы заключили Math.random() в функцию, не означает, что она запускается только один раз. Каждый вызов rn() возвращает новое значение . Локальная переменная a инициализируется заново при каждом вызове функции. Это не сохраняется между вызовами.

В исходном коде примерно в 16% случаев (80% x 20%) вы бы случайно пропустили и запустили обе ветви.

1 голос
/ 04 августа 2020

Проблема в том, что вы вызываете rn() несколько, и каждый раз он возвращает разные числа. Результат, который вы тестируете в if, отличается от того, который вы показываете с помощью document.write(), или того, который вы тестируете во втором if.

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

Также используйте else, если вы хотите что-то сделать, когда предыдущий тест не прошел.

function rn() {
  var a = Math.random()
  return a
}

function writerandon() {
  var x = 0

  while (x < 100) {
    var num = rn();
    if (num < 0.8) {
      document.getElementById("bd").innerHTML += (num + "<br>")
    } else {
      break;
    }

    x++
  }
}
//
document.getElementById("11").innerHTML = writerandon()
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>exp</title>
</head>

<body id="bd">

  <h1 id="11"></h1>

</body>

<script src="exp.js"></script>

</html>
1 голос
/ 04 августа 2020

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

function rn() {
    var a = Math.random()
    return a
}

function writerandon() {
    var x = 0

    while (x < 100) {
        const randomNumber = rn();

        if (randomNumber < 0.8) {
            document.write(randomNumber + "<br>")
        }

        if (randomNumber > 0.8) {
            x = 100
        }

        x++
    }
}
//
document.getElementById("11").innerHTML = writerandon()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...