Проблема с отбором чисел из массива
m разных случайных целых чисел из диапазона [a,b]
function random_nums() { var handler = "var a = document.sub_window.a.value;" + "if (isNaN(a) || !a) {alert('Введите число A!'); return;}" + "var b = document.sub_window.b.value;" + "if (isNaN(b) || !b) {alert('Введите число B!'); return;}" + "var m = document.sub_window.m.value;" + "if (isNaN(m) || !m) {alert('Введите число m!'); return;}" + "var mapTrue = new Array(); var outSet = ''; var num = 0;" + "for (var i = 0; i < m; i++) {" + "num = Math.floor(Math.random() * ((b - a)+a)); if (mapTrue[num]) continue; outSet = outSet + (i == 0 ? ' ' : ',') + num; mapTrue[num] = true;}" + "alert(outSet);"; var str = 'A: <INPUT type="text" value="1" size="25" name="a"/><BR>' + 'B: <INPUT type="text" value="1" size="25" name="b"/><BR>' + 'm: <INPUT type="text" value="1" size="25" name="m"/><BR>' + '<INPUT type="button" value="Получить набор целых чисел..." onClick="' + handler + '"/>'; windowTemplate("Получите, если это возможно, m разных случайных целых чисел из диапазона [a,b]", str); } без этих строчек: var mapTrue = new Array() и if (mapTrue[num]) continue числа начинают повторятся, а с ними выборка получается на больше чем нужно. Помогите в чем ошибка |
mindkilla,
1) потому что: num = Math.floor(Math.random() * ((b - a)+a));//создать какое-то число if (mapTrue[num]) continue;//если такое число есть то пропустить эту итерацию mapTrue[num] = true;//поставить флаг что такое-то число есть 2) Цитата:
Math.floor(Math.random() * ((b - a)+a))никогда не будет больше b, тем более что это идентично Math.floor(Math.random() * b) |
ну например если указываешь a=1, b=10, m=5. То скрипт выведет: 34, 43, 2, 3, 32.
|
такого быть не может :stop:
var a = new Number(prompt('','1')); var b = new Number(prompt('','10')); for (var i = 0, str = ''; i < 10; i++){ str += Math.floor(Math.random() * ((b - a)+a)) + "\n"; } alert(str) |
поиграл в песочнице:
Поиграть! var a = new Number(prompt('', '1')); var b = new Number(prompt('', '10')); var m = new Number(prompt('', '10')); var mapTrue = new Array(); var outSet = ''; var num = ''; for (var i = 0; i < m; i++) { num = Math.floor(Math.random() * ((b - a) + a)); if (mapTrue[num]) continue; outSet = outSet + (i == 0 ? ' ' : ',') + num; mapTrue[num] = true; } alert(outSet); Выбирает, не полное количество элементов массива( |
mindkilla,
у меня всё ок в песочнице и здесь, при выборке a = 1, b = 10, 34 у меня не выскакивает потому что не может выскакивать;) |
Цитата:
|
mindkilla,
это легко поправить: var a = new Number(prompt('', '1')); var b = new Number(prompt('', '10')); var m = new Number(prompt('', '10')); var mapTrue = new Array(); var outSet = ''; var num = ''; for (var i = 0; i < m; i++) { num = Math.floor(Math.random() * ((b - a) + a)); if (mapTrue[num]) { i--; continue; } outSet = outSet + (i == 0 ? ' ' : ',') + num; mapTrue[num] = true; } alert(outSet); |
Dim@,
Вооот, спасибо большое! Плюсую! |
Dim@,
теперь другая проблемка вылезла, при любой выборке выводит 0 :( |
Часовой пояс GMT +3, время: 08:23. |