Использование JavaScript для получения случайных чисел 2-ди git в указанном диапазоне c, где ограничены 1-я и 2-я цифры - PullRequest
0 голосов
/ 03 марта 2020

У меня есть небольшая интересная математическая головоломка, которую нужно решить.

Я пишу тест, чтобы проверить, что значения вне диапазона поля в окне не могут быть введены. По большей части это очень просто.

Я использую такую ​​функцию:

function getRanInt(min, max)
{
    let min = Math.ceil(min);
    let max = Math.floor(max);
    return Math.floor(Math.random() * (max - min) + min);
}

, чтобы установить диапазон «ошибочных» значений, которые я хочу проверить.

Однако, есть одно поле, которое бросает гаечный ключ в этом методе. Одно поле имеет ограничения на каждый ди git. Таким образом, первая ди git может быть только между 0-7, а вторая ди git может быть только между 0-3.

Моя первая мысль состояла в том, чтобы просто объединить два числа, которые я мог бы отдельно ограничить, например, так:

let m1_1;
let m1_2;

m1_1 = getRanInt(8,9);
m1_2 = getRanInt(4,9);

m1 = m1_1.toString() + m1_2.toString();
m1 = Number(m1);

, пока я не подумал об этом в течение полсекунды и не понял, что это только заставит меня ошибочные значения> 83, но опускаем целый ряд возможных ошибочных значений, таких как 24, 36, 18 и т. д. c ...

Я ломал голову над попыткой найти решение, которое не не очень запутанный, но я рисовал пустым. Я подумал, что смогу обратиться к вам здесь с хорошим отличием и посмотреть, не могли бы вы помочь отцепить мои шестерни.

ДОПОЛНИТЕЛЬНО: Если кому-то интересно, подсказка для рассматриваемого поля прямо говорит:

2 Digits:
1st = 0 - 7
2nd = 0 - 3

Ответы [ 2 ]

1 голос
/ 03 марта 2020

Чтобы проверить все неправильные значения, вы можете объединить предоставленное вами решение со вторым набором значений, которые доступны с помощью ваших функций, следующим образом:

let result;
if(Math.round(Math.random()))
{
let m1_1;
let m1_2;

m1_1 = getRanInt(8,9);
m1_2 = getRanInt(0,9);

let m1 = m1_1.toString() + m1_2.toString();
result = Number(m1);
}
else
{
    let m2_1;
let m2_2;

m2_1 = getRanInt(0,7);
m2_2 = getRanInt(4,9);

let m2 = m2_1.toString() + m2_2.toString();
result = Number(m2);
}
0 голосов
/ 03 марта 2020

Мне просто интересно, почему пользователи могут вводить неправильные значения в первую очередь.

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

я покажу вам, как это может выглядеть ниже, но вы можете go еще дальше и переопределить любой ввод, сделанный пользователем, на основе значений pattern или min и max - или для проверки правильности ввода.

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

function updateLabel(rangeId, rangeValue) {
  let labelElement = document.getElementById(rangeId + "label");

  if (labelElement) {
    labelElement.innerHTML = rangeValue;
  }
}
label {
  display: none;
  font-size: 0.8rem;
}

input:invalid + label,
.range-container > label {
  display: inline-block;
}


.range-container {
  display: flex;
  align-items: center;
}
<h4>Text Input</h4>
<div>
  <input type="text" placeholder="0-7" maxlength="1" pattern="[0-7]{1}">
  <label>A number between 0 and 7 is required.</label>
</div>
<div>
  <input type="text" placeholder="0-3" maxlength="1" pattern="[0-7]{1}">
  <label>A number between 0 and 3 is required.</label>
</div>

<hr/>

<h4>Number Input</h4>
<div>
  <input type="number" placeholder="0-7" min="0" max="7">
  <label>A number between 0 and 7 is required.</label>
</div>
<div>
  <input type="number" placeholder="0-3" min="0" max="3">
  <label>A number between 0 and 3 is required.</label>
</div>
<hr/>

<h4>Range Slider</h4>
<div class="range-container">
  <input type="range" oninput="updateLabel(this.id, this.value)" id="first" min="0" max="7" value="0">
  <label id="firstlabel">0</label>
</div>
<div class="range-container">
  <input type="range" oninput="updateLabel(this.id, this.value)" id="second" min="0" max="3" value="0">
  <label id="secondlabel">0</label>
</div>
...