Tuesday, December 13, 2011

Flex: Random numbers

Every now and then you need to do something at random in your application (i.e. pick a random item from a collection).

For that, you probably need some random number to decide which option to choose. Here is a simple example that shows you how to generate random numbers in Flex.

To do this, you can you can use the static method random() in the Math class. Math.random gives you a random number between 0 and 1. 

To get a whole random number between, for example 0 and 100, just multiply the Math.random() result by 100 and round the outcome of that calculation.

Source code for the example:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" baseColor="0xCCCCFF"
               xmlns:mx="library://ns.adobe.com/flex/halo" minWidth="1024" minHeight="768">
        <!-- Place non-visual elements (e.g., services, value objects) here -->
            private function generateRandomNumber( start:Numberend:Number ):void
                var randomNum:Number;
                if( end == 1 )
                    // Number is between 0 and 1, don't round.
                    randomNum = Math.random();
                    // Number is between 0 and 100 or 1000, round the number
                    randomNum = Math.round( Math.random() * end );
                // Show random number in TextInput
                randomNumber.text = randomNum.toString();
        <s:VerticalLayout paddingLeft="5" paddingRight="5"
                          paddingTop="5" paddingBottom="5" />
    <s:VGroup id="hgroup">
        <s:Button label="Number between 0 and 1" 
                  click="generateRandomNumber(0,1)" width="250"/>
        <s:Button label="Number between 0 and 100" 
                  click="generateRandomNumber(0,100)" width="250"/>
        <s:Button label="Number between 0 and 1000" 
                  click="generateRandomNumber(0,1000)" width="250"/>
    <s:TextInput id="randomNumber" width="{hgroup.width}" editable="false"
                 textAlign="center" height="60" fontSize="20"