Previous Page
Next Page

Recipe 4.7. Generating a Random Number

Problem

You want to use ActionScript to generate a random number.

Solution

Use Math.random( ) to generate a random number between 0 and .999999. Optionally, use the NumberUtilities.random( ) method to generate a random number within a specific range.

Discussion

You can use the Math.random( ) method to generate a random floating-point number from 0 to 0.999999999. In most cases, however, programs call for a random integer, not a random floating-point number. Furthermore, you may want a random value within a specific range. If you do want a random floating-point number, you'll need to specify its precision (the number of decimal places).

The simplest way to generate random numbers within a range and to a specified precision is to use the custom NumberUtilities.random( ) method. This method accepts up to three parameters, described as follows:



minimum

The smallest value in the range specified as a Number.



maximum

The largest value in the range specified as a Number.



roundToInterval

The optional interval to use for rounding. If omitted, numbers are rounded to the nearest integer. You can specify integer intervals to round to integer multiples. You can also specify numbers smaller than 1 to round to numbers with decimal places.

The NumberUtilities class is in the ascb.util package, so be sure to include an import statement.


The following example illustrates some uses of the round( ) method:

// Generate a random integer from 0 to 100.
trace(NumberUtilities.random(0, 100));

// Generate a random multiple of 5 from 0 to 100.
trace(NumberUtilities.random(0, 100, 5));

// Generate a random number from -10 to 10, rounded to the 
// nearest tenth.
trace(NumberUtilities.random(-10, 10, .1));

// Generate a random number from -1 to 1, rounded to the 
// nearest five-hundredth.
trace(NumberUtilities.random(-1, 1, .05));

To test that the random numbers generated by the NumberUtilities.random( ) method are evenly distributed, you can use a script such as the following:

package {

  import flash.display.Sprite;
  import ascb.util.NumberUtilities;
  import flash.utils.Timer;
  import flash.events.TimerEvent;
  
  public class RandomNumberTest extends Sprite {

    private var _total:uint;
    private var _numbers:Object
    
    public function RandomNumberTest(  ) {
      var timer:Timer = new Timer(10);
      timer.addEventListener(TimerEvent.TIMER, randomizer);
      timer.start(  );
      _total = 0;
      _numbers = new Object(  );
    }
    
    private function randomizer(event:TimerEvent):void {
      var randomNumber:Number = NumberUtilities.random(1, 10, 1);
      _total++;
      if(_numbers[randomNumber] == undefined) {
        _numbers[randomNumber] = 0;
      }
      _numbers[randomNumber]++;
      trace("random number: " + randomNumber);
      var item:String;
      for(item in _numbers) {
        trace("\t" + item + ": " + Math.round(100 * _numbers[item]/_total));
      }
    }
    
  }
}

See Also

Recipes 4.3 and 4.11


Previous Page
Next Page
Converted from CHM to HTML with chm2web Pro 2.85 (unicode)