|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
var t:Number = beetwin( 0, 3 ) ; // от 0 до 3 private function beetwin(param0:int, param1:int):Number { var temp:Number = param0 + Math.floor(Math.random() * (param1 - param0)) ; return (temp == param0 || temp == param1)?beetwin(param0, param1):temp; } или даже так, универсальнее: var t:Number = beetwin( 0, 3, false ) ; // от 0 до 3, не включать границы диапазона в результат private function beetwin(param0:int, param1:int, incl:boolean):Number { var temp:Number = param0 + Math.floor(Math.random() * (param1 - param0)) ; if ( incl ) { return temp; } else { return (temp == param0 || temp == param1)?beetwin(param0, param1, incl):temp; } } Последний раз редактировалось Ookami; 06.11.2011 в 20:06. |
|
|||||
две переменных использовать как минимум, как максимум, как первое исключение и как второе. бубна не хватает.
__________________
Humanity.push(new Man()); |
|
|||||
вы наверно не поняли что мне нужно..
__________________
Humanity.push(new Man()); |
|
|||||
Цитата:
Цитата:
|
|
|||||
Да, немного не так понял. Перечитал ваш код - все нормально на первый взгляд... Да и на второй тоже. Запустил у себя тест аналогично goodguy, получил zeros: 2493 ones: 2544 twos: 2484 threes: 2479
|
|
|||||
два параметра, коими не должен быть рандом.
__________________
Humanity.push(new Man()); |
|
|||||
package { import flash.display.Sprite; import flash.net.FileReference; /** * ... * @author DoctorSTaL */ public class TestClass extends Sprite{ public function TestClass() { super(); var max:int = 10; var resArr:Vector.<int> = new Vector.<int>(max); var r:int; var i:int = 10000; while(i--){ r=excludedRand(max,1,5,7,3); resArr[r]++; } i = max; while (i--) { trace(i+" : "+resArr[i]); } } private function excludedRand(max:uint, ...excludes):uint { if (max <= excludes.length) throw(new ArgumentError("To many excludes.")); if (excludes.sort(Array.NUMERIC|Array.UNIQUESORT) == 0) throw(new ArgumentError("You must use unique exclusions due to use excludedRand.")); if (excludes[excludes.length - 1] >= max) throw(new ArgumentError("All exclusions shoud be less than max value.")); var len:uint = max - excludes.length; var res:uint = uint(Math.random() * len); for (var i:int = 0; i < excludes.length; i++) { if (res >= excludes[i]) res++; else break; } return res; } } } Последний раз редактировалось crazyone; 06.11.2011 в 20:51. Причина: Добавил проверку аргументов |
|
|||||
Код с вашей функцией:
package { import flash.display.Sprite; import flash.events.Event; public class Main extends Sprite { private var _zeros: int = 0; private var _ones: int = 0; private var _twos: int = 0; private var _threes: int = 0; public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); for (var j:int = 0; j < 10; j++ ) { _zeros = 0; _ones = 0; _twos = 0; _threes = 0; for (var i:int = 0; i < 10000; i++) { var rand:int = randExp(); if (rand == 0) _zeros++; else if (rand == 1) _ones++; else if (rand == 2) _twos++; else if (rand == 3) _threes++; } trace("zeros: " + _zeros, "ones: " + _ones, "twos: " + _twos, "threes: " + _threes); } } private function randExp(c:int = -1,c1:int = -1):int { var t:int = Math.floor(Math.random() * 4); return (t == c || t == c1)?randExp(c, c1):t; } } } zeros: 2481 ones: 2619 twos: 2444 threes: 2456 zeros: 2518 ones: 2515 twos: 2515 threes: 2452 zeros: 2513 ones: 2517 twos: 2503 threes: 2467 zeros: 2506 ones: 2462 twos: 2560 threes: 2472 zeros: 2535 ones: 2474 twos: 2477 threes: 2514 zeros: 2470 ones: 2533 twos: 2541 threes: 2456 zeros: 2503 ones: 2448 twos: 2539 threes: 2510 zeros: 2532 ones: 2478 twos: 2445 threes: 2545 zeros: 2611 ones: 2406 twos: 2418 threes: 2565 zeros: 2583 ones: 2475 twos: 2432 threes: 2510 Не вижу проблемы с распределением нулей - все значения примерно поровну. |
Часовой пояс GMT +4, время: 03:36. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|