Ради обучения (я очень новичок) я пытаюсь написать функцию, которая будет генерировать случайные числа в соответствии с тремя введенными пользователем переменными. Пользователь может ввести, сколько случайных чисел генерировать
var count = 10;
какие числа не генерировать (через запятую)
var doNotInclude = (document.getElementById("doNotIncludeInput").value).split(",");
и какое максимально возможное число должно быть
var highestNumber = 10;
Теоретически, если пользователь ввел «1,2» для переменной doNotInclude, функция должна создать массив, содержащий эти два числа, а затем каждый раз, когда она генерирует случайное число, сверять его с массивом, чтобы увидеть, является ли сгенерированное число правильным. одно из чисел, которое он не должен генерировать.
К сожалению, это не работает. Он создает массив так, как должен, который я проверил с помощью console.log(), но он все равно будет генерировать числа, которые не должен. Вот полный скрипт:
document.getElementById("button").onclick = function() {
var total = 0,
average = 0,
random = 0,
count = parseInt(document.getElementById("countInput").value),
doNotInclude = document.getElementById("doNotIncludeInput").value).split(","),
highestNumber = parseInt(document.getElementById("highestNumberInput").value);
document.getElementById("text1").innerHTML = "";
for (var i = 0; i < count; i++) {
var proceed = false;
for (random = Math.floor(((Math.random()) * (highestNumber + 1))); proceed == false;) {
if (doNotInclude.indexOf(random)===-1) {
proceed = true;
}
}
document.getElementById("text1").innerHTML = document.getElementById("text1").innerHTML + "<br />" + (i + 1) + ". " + random;
total = total + random;
if (i == (count - 1)) {
total / count;
document.getElementById("text").innerHTML = "Mean average = " + (Math.round(total / count));
}
}
}
Часть, которая не работает
if (doNotInclude.indexOf(random)===-1) {
proceed = true;
}
функция indexOf - это то, о чем я читал здесь, но, думаю, я не совсем понимаю ее. Насколько я понимаю, он должен проверить, совпадают ли какие-либо значения массива со случайной величиной, и если нет, то вернуть «-1» и выполнить мой код. Хотя, похоже, этого не происходит. Я очень смущен ... хотел бы помочь. Возможно ли, что массив хранит числа в виде строк, а не целых чисел, и в этом проблема?
proceed
используется для цикла, который продолжает генерировать случайные числа до тех пор, пока не получит число, не совпадающее с числом из массива. Цикл for будет продолжаться до тех пор, покаproceed == false
. Если цикл обнаружит, что сгенерированное число не соответствует ничему в массиве, он установитproceed = true
. - person Eric David Sartor   schedule 20.04.2015