www.webdeveloper.com
Results 1 to 6 of 6

Thread: [RESOLVED] randomArray with exceptions

  1. #1
    Join Date
    Oct 2009
    Posts
    9

    resolved [RESOLVED] randomArray with exceptions

    I need a some help with some code I've assembled from different websites.
    I want to create an array of 3 random numbers between lets say 1 & 10 but with the exception or the exclusion of lets say 6.
    My limited knowledge of functions, their parameters and loops prevent me for coming up with a solution, any advice would be greatly appreciated. Here's what I've got so far:
    Code:
    var myNumArray = create_unique_random_array(3,10,5);
    
    function create_unique_random_array(num_elements,max,current_pic) {
    
        var temp, nums = new Array;
    	
        for (var element=0; element<num_elements; element++) {
    
            //IMPORTANT: DON'T FORGET THE SEMI-COLON AT THE END
            while((temp=number_found(randomizeMe(this,{maxNumber:max, exempt:current_pic),nums))==-1);
    		
    		
            nums[element] = temp;
        }
    
        return (nums);
    }
    
    function number_found (random,number_array) {
    	
        for (var element=0; element<number_array.length; element++) {
    
            if (random==number_array[element] ) {
                return (-1);
    	}
       }
    
        return (random);
    }
    
    function randomizeMe(me, options){
        var options = options || {}; // setup the options
        var imExempt = options.exempt || null; // capture the exempt numbers
        var maxNum = options.maxNumber || 0; // capture the maximum number to randomize	
        var rand_no = Math.floor(Math.random()*maxNum); // run the random numbers
        
        if(imExempt != null){ // check to see if there are any exempt numbers
            imExempt = imExempt.toString(); // turn the exemptions into a string
            for(i=0; i <= maxNum; i++){ // loop throught the set number
                if(imExempt.search(rand_no) != -1){ // check for exempt numbers			
                    return randomizeMe(me, {exempt: imExempt, maxNumber: maxNum}); // start over 
                }
            }
        }    
        return rand_no;// return the new random number
    } 
    
    document.write(myNumArray);
    Last edited by Kor; 10-28-2009 at 08:37 AM. Reason: wrap the code [code][/code]

  2. #2
    Join Date
    Dec 2003
    Location
    Bucharest, ROMANIA
    Posts
    15,428
    Quote Originally Posted by simpleAnswers View Post
    I want to create an array of 3 random numbers between lets say 1 & 10 but with the exception or the exclusion of lets say 6.
    Code:
    <script type="text/javascript">
    var nrmax=3, limit=10, array=[], exception=6, nr;
    for(var i=0;i<nrmax;i++){
    nr=Math.ceil(Math.random()*limit);
    nr==exception?i--:array[array.length]=nr;
    }
    alert(array);
    </script>

  3. #3
    Join Date
    Oct 2009
    Posts
    9
    Thanks for help Red Devil, but I also wanted every number in the array to be unique; I didn't want any duplications in it. Luckily I loaded the code I posted in Dreamweaver and I threw back an error on Line 12, I didn't close the randomizeMe parameter properly. I fixed it and the code works fine now :-)
    I'll save your recommendation for future use, Thanks.

    Here's the code for anyone who wants it:

    Code:
    <script type="text/javascript">
    var myNumArray = create_unique_random_array(3,20,[6,10]);
    
    function create_unique_random_array(num_elements,maxNum,current_pic) {
    
        var temp, nums = new Array;
    	
        for (var element=0; element<num_elements; element++) {
    
            //IMPORTANT: DON'T FORGET THE SEMI-COLON AT THE END
            while((temp=number_found(randomizeMe(this,{maxNumber:maxNum, exempt:current_pic}),nums))==-1);
    		
    		
            nums[element] = temp;
        }
    
        return (nums);
    }
    
    function number_found (rand,number_array) {
    	
        for (var element=0; element<number_array.length; element++) {
    
            if (rand==number_array[element] ) {
                return (-1);
    	}
       }
    
        return (rand);
    }
    function randomizeMe(me, options){
        var options = options || {}; // setup the options
        var imExempt = options.exempt || null; // capture the exempt numbers
        var maxNum = options.maxNumber || 0; // capture the maximum number to randomize	
        var rand_no = Math.ceil(Math.random()*maxNum); // run the random numbers
        
        if(imExempt != null){ // check to see if there are any exempt numbers
            imExempt = imExempt.toString(); // turn the exemptions into a string
            for(i=0; i <= maxNum; i++){ // loop throught the set number
                if(imExempt.search(rand_no) != -1){ // check for exempt numbers			
                    return randomizeMe(me, {exempt: imExempt, maxNumber: maxNum}); // start over 
                }
            }
        }    
        return rand_no;// return the new random number
    } 
    
    document.write(myNumArray);
    </script>

  4. #4
    Join Date
    Dec 2003
    Location
    Bucharest, ROMANIA
    Posts
    15,428
    Quote Originally Posted by simpleAnswers View Post
    Thanks for help Red Devil, but I also wanted every number in the array to be unique; I didn't want any duplications in it.
    That's simple:
    Code:
    function createRandomNumbers(){
    var nrmax=3, limit=10, array=[], exception=6, nr, q, i, j;
    for(i=0;i<nrmax;i++){
    q=false;
    nr=Math.ceil(Math.random()*limit);
    	for(j=0; j<array.length;j++){
    	if(nr==array[j]){q=true;break}
    	}
    nr==exception||q?i--:array[array.length]=nr;
    }
    return array;
    }

  5. #5
    Join Date
    Oct 2009
    Posts
    9
    Thanks Kor
    I fairly understand ur formula and it works fine plus its definitely superior to mine because of its simplicity, one thing I find a bit perplexing is :

    nr==exception||q?i--:array[array.length]=nr;

    Could you explain this bit of the code, is it regex or an if statment or both? This bit of the code baffles me!

    ...and if you have the time you could show me how to add more than one exception to your formula.

    Thanks again

  6. #6
    Join Date
    Dec 2003
    Location
    Bucharest, ROMANIA
    Posts
    15,428
    That's a ternary operator/expression. A short cut for an if/else statement. The general syntax is
    Code:
    condition?statement_if_true:statement_if_false;
    The expression:
    Code:
    nr==exception||q?i--:array[array.length]=nr;
    is the short equivalent of:
    Code:
    if(nr==exception||q){
    i--;
    }
    else{
    array[array.length]=nr;
    }
    Last edited by Kor; 10-28-2009 at 12:56 PM.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
HTML5 Development Center



Recent Articles