![]() |
|
Модераторы: Sardar, Aliance |
![]()
|
|
| о0НиК0о |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 21.1.2007 Репутация: нет Всего: 1 |
Нужно решить следующею задачу:
Есть страницы: 1.htm 2.htm 3.htm … 100.htm На главной странице есть кнопка при нажатии которой из выше перечисленного списка страниц случайным образом выбирается и загружается одна страница. Знающие люди помогите пожалуйста написать такой скрипт. Очень надо, а знания Java у меня пока на нуле. |
|||
|
||||
| tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 1 Всего: 132 |
Модератор: Перенес из Java: Общие вопросы
|
|||
|
||||
| 12345c |
|
|||
![]() Круглый ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 2018 Регистрация: 26.12.2005 Где: наша не пропадала ? Репутация: 57 Всего: 101 |
Это сообщение отредактировал(а) 12345c - 22.1.2007, 16:24 |
|||
|
||||
| о0НиК0о |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 21.1.2007 Репутация: нет Всего: 1 |
12345c, чёта у меня не работает
Я вот нашёл ещё такую конструкцию, здесь можно отдельно адрес каждой страницы прописать:
Возможно кому-нибудь понадобится |
|||
|
||||
| 12345c |
|
|||
![]() Круглый ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 2018 Регистрация: 26.12.2005 Где: наша не пропадала ? Репутация: 57 Всего: 101 |
Я неправильно функцию написал: не randomize, а random, исправил выше.
Добавлено @ 16:29 А та конструкция с адресами излишне многословна. В ней достаточно выбрать адрес из массива:
Добавлено @ 16:33 И использовать Math.round - несколько ошибочное занятие, потому что он округляет до ближайшего целого. Получится от 1 до 4. |
|||
|
||||
| AKS |
|
|||
|
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 27 Всего: 52 |
Да нет ничего "ошибочного" - вот здесь будут присутствовать все элементы массива:
|
|||
|
||||
| 12345c |
|
|||
![]() Круглый ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 2018 Регистрация: 26.12.2005 Где: наша не пропадала ? Репутация: 57 Всего: 101 |
Они, конечно, будут, но с разной вероятностью, поэтому я назвал "несколько ошибочное". :)
А твой пример по-настоящему ошибочен, потому что Math.round(-0.6)==-1 . :) |
|||
|
||||
| AKS |
|
|||
|
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 27 Всего: 52 |
Но позвольте, имея дело с Math.random, мы в любом случае столкнемся к какой-либо вероятностью. А уж какая она будет, "разная" или "голубая-красная" - угадать не получится. Ни метод Math.floor, ни Math.round не сумеют обеспечить никакой закономерности... Я бы сказал: "катастрофически ошибочен!" Math.round(-0.6) == Math.floor(-0.6) ? |
|||
|
||||
| Zeroglif |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
||||
|
||||
| AKS |
|
|||
|
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 27 Всего: 52 |
Неужели здесь есть некая закономерность, в которую можно вмешаться? Если уж на то пошло, то мы уже вмешались "по полной программе", умножив случайное число (от 0 до 1) на другое целое число, причем на то, которое нам угодно. И в таком случае дальнейшее вмешательство Math.round может внести лишь дополнительный "элемент неожиданности". Но ведь этого мы и хотели изначально, обратившись к Math.random. Разве не так? |
|||
|
||||
| Zeroglif |
|
||||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
Неа. Допустим, в неком цикле будет так:
Рэндом будет честно колошматить свою рэндомную "закономерность", а умножение на единицу будет... тоже честным, нетрудно догадаться, что одно в другое не лезет. То же самое с floor. Допустим, у нас диапазон целых от 0 до 3 (исключительно):
Что делает floor:
3 ровных по размеру промежутка. Теперь берём round для того же диапазона:
Что делает round:
3 ровных промежутка? Нет. То есть, если представить себе, что рэндом выбрасывает значения вразнобой, но без дискриминации к конкретным значениям (с ровной частотой), то последующее округление с помощью round как раз занимается дискриминацией... крайних... негров. |
||||||||||
|
|||||||||||
| AKS |
|
|||
|
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 27 Всего: 52 |
Zeroglif
Да я, в общем-то, готов согласиться, что есть такая штука, как "честная рэндомная закономерность". Даже если ее нет, то пусть будет. Как Вы пишите: "если представить себе..." - могу представить, почему бы и нет? Вот только не пойму, почему бы не добавить к одной "рэндомности" (от Math.random) еще другой "рэндомности" (от Math.round)? Если только из жалости к "задискриминированным неграм"... ;) |
|||
|
||||
| Zeroglif |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
Потому что "другая" - это обычное закономерное округление, вклинивающееся в общий принцип раздачи значений, которые были "chosen randomly or pseudo randomly with approximately uniform distribution over that range". |
|||
|
||||
| AKS |
|
|||
|
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 27 Всего: 52 |
Zeroglif
Ну, хорошо. Как я писал - я готов согласиться, что random дает "честную закономерность", хотя черным (да еще и жирным! ;) ) по белому написано, что это должна быть лишь приблизительно-равномерная выборка. Но разве затем не происходит какой-либо трансформации в результате наших действий, того же умножения? У меня в голове "крутится" такой пример. Умножая (псевдо)случайное число на 10 и используя floor, мы получаем закономерность - меньше 0.1*** -> 0, меньше 0.2*** -> 1 и т.д. Но вот умножив, к примеру, на 11, получим ли мы желанную закономерность? К тому же надо учесть, что кол-во знаков в числе, выдаваемом методом Math.random, варьируется в пределах 16-20. И если взять и передать методу Math.floor 19-и значное число (0.99999999999999999) - то он возвратит единицу вместо ожидаемого нуля. Безусловно имеются нюансы, я поэтому и писал об отсутствии закономерностей. Теоритически - все складно получается, но можно ли доказать практическим путем наличие закономерности во всей цепи наших (напару с браузером) действий? Лично мне это представляется невозможным. Я также надеюсь, что никто не будет браться за практические примеры, иначе нас тут всех запишут сами знаете в какую "категорию пассажиров"... На всякий случай напомню, что я не против floor, и я не за round, и я отдаю себе отчет в том, что за "трюк" с round происходит в моем первом примере, и почему пример выдает необходимые результаты... |
|||
|
||||
| Zeroglif |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
Эта приблизительность находится в разумных пределах, легко проверить.
Происходит, но к каждому значению применяется одно и тоже умножающее действо, что не влияет на частоту. Легко и непринуждённо всё проверяется. Раз уж теория не убеждает.
Как видите (по моим snapshot-результатам), floor не мешает получать относительно равномерную выборку, а round дискриминирует крайние значения. Соответственно, если возвращаться к первоначальному вопросу в этой ветке (про выдачу страниц), то 2 крайние страницы при использовании round будут загружаться реже других (но чтобы это стало заметным, надо кликать кнопку много-много раз). Вы можете менять пример, расширить массив и умножать на 11 или 10, начинать не с нуля и т.п. - это никак не изменит логику. Это сообщение отредактировал(а) Zeroglif - 23.1.2007, 13:23 |
||||||
|
|||||||
![]()
|
| Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |