Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.11.2012, 16:16
Новичок на форуме
Отправить личное сообщение для mindkilla Посмотреть профиль Найти все сообщения от mindkilla
 
Регистрация: 04.11.2012
Сообщений: 7

Проблема с отбором чисел из массива
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 числа начинают повторятся, а с ними выборка получается на больше чем нужно. Помогите в чем ошибка
Ответить с цитированием
  #2 (permalink)  
Старый 04.11.2012, 18:03
Аватар для Dim@
Профессор
Отправить личное сообщение для Dim@ Посмотреть профиль Найти все сообщения от Dim@
 
Регистрация: 21.04.2012
Сообщений: 951

mindkilla,
1) потому что:
num = Math.floor(Math.random() * ((b - a)+a));//создать какое-то число

if (mapTrue[num]) continue;//если такое число есть то пропустить эту итерацию

mapTrue[num] = true;//поставить флаг что такое-то число есть

2)
Сообщение от mindkilla
а с ними выборка получается на больше чем нужно
может быть меньше? ибо
Math.floor(Math.random() * ((b - a)+a))
никогда не будет больше b, тем более что это идентично
Math.floor(Math.random() * b)
__________________
Интересно я единственный человек у которого чистая --> ⌨?
Ответить с цитированием
  #3 (permalink)  
Старый 04.11.2012, 20:53
Новичок на форуме
Отправить личное сообщение для mindkilla Посмотреть профиль Найти все сообщения от mindkilla
 
Регистрация: 04.11.2012
Сообщений: 7

ну например если указываешь a=1, b=10, m=5. То скрипт выведет: 34, 43, 2, 3, 32.
Ответить с цитированием
  #4 (permalink)  
Старый 04.11.2012, 22:02
Аватар для Dim@
Профессор
Отправить личное сообщение для Dim@ Посмотреть профиль Найти все сообщения от Dim@
 
Регистрация: 21.04.2012
Сообщений: 951

такого быть не может
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)
__________________
Интересно я единственный человек у которого чистая --> ⌨?
Ответить с цитированием
  #5 (permalink)  
Старый 05.11.2012, 02:06
Новичок на форуме
Отправить личное сообщение для mindkilla Посмотреть профиль Найти все сообщения от mindkilla
 
Регистрация: 04.11.2012
Сообщений: 7

поиграл в песочнице:
Поиграть!
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);


Выбирает, не полное количество элементов массива(
Ответить с цитированием
  #6 (permalink)  
Старый 05.11.2012, 07:47
Аватар для Dim@
Профессор
Отправить личное сообщение для Dim@ Посмотреть профиль Найти все сообщения от Dim@
 
Регистрация: 21.04.2012
Сообщений: 951

mindkilla,
у меня всё ок в песочнице и здесь, при выборке a = 1, b = 10, 34 у меня не выскакивает потому что не может выскакивать
__________________
Интересно я единственный человек у которого чистая --> ⌨?
Ответить с цитированием
  #7 (permalink)  
Старый 05.11.2012, 08:37
Новичок на форуме
Отправить личное сообщение для mindkilla Посмотреть профиль Найти все сообщения от mindkilla
 
Регистрация: 04.11.2012
Сообщений: 7

Сообщение от Dim@ Посмотреть сообщение
mindkilla,
у меня всё ок в песочнице и здесь, при выборке a = 1, b = 10, 34 у меня не выскакивает потому что не может выскакивать
ну там например a=1 b=10 m=9, выскакивает 7 значений вместо 9
Ответить с цитированием
  #8 (permalink)  
Старый 05.11.2012, 08:45
Аватар для Dim@
Профессор
Отправить личное сообщение для Dim@ Посмотреть профиль Найти все сообщения от Dim@
 
Регистрация: 21.04.2012
Сообщений: 951

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);
__________________
Интересно я единственный человек у которого чистая --> ⌨?
Ответить с цитированием
  #9 (permalink)  
Старый 05.11.2012, 08:53
Новичок на форуме
Отправить личное сообщение для mindkilla Посмотреть профиль Найти все сообщения от mindkilla
 
Регистрация: 04.11.2012
Сообщений: 7

Dim@,
Вооот, спасибо большое! Плюсую!
Ответить с цитированием
  #10 (permalink)  
Старый 05.11.2012, 09:54
Новичок на форуме
Отправить личное сообщение для mindkilla Посмотреть профиль Найти все сообщения от mindkilla
 
Регистрация: 04.11.2012
Сообщений: 7

Dim@,
теперь другая проблемка вылезла, при любой выборке выводит 0
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с выводом массива на консоль Vempel jQuery 1 06.08.2012 14:57
Проблема с передачей массива ajax-ом maximale AJAX и COMET 1 11.02.2012 00:20
Проблема в Решении задачи.Генератор чисел Ikari Общие вопросы Javascript 4 08.01.2012 01:07
Работа с последовательностью натуральных чисел Stillife Общие вопросы Javascript 1 18.05.2011 19:03
проблема с элементами массива Krinart Общие вопросы Javascript 3 05.09.2008 20:06