# [RESOLVED] randomArray with exceptions

• 10-28-2009, 08:30 AM
[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);```
• 10-28-2009, 08:45 AM
Kor
Quote:

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>```
• 10-28-2009, 09:50 AM
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>```
• 10-28-2009, 11:05 AM
Kor
Quote:

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; }```
• 10-28-2009, 11:31 AM
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
• 10-28-2009, 12:50 PM
Kor
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; }```

## X vBulletin 4.2.2 Debug Information

• Page Generation 0.07434 seconds
• Memory Usage 2,375KB
• Queries Executed 11 (?)
Template Usage (21):
• (7)bbcode_code_printable
• (2)bbcode_quote_printable
• (1)footer
• (1)gobutton
• (1)navbar_moderation
• (1)navbar_noticebit
• (2)option
• (1)spacer_close
• (1)spacer_open

Phrase Groups Available (3):
• global
• postbit
Included Files (19):
• ./global.php
• ./includes/class_bootstrap.php
• ./includes/init.php
• ./includes/class_core.php
• ./includes/config.php
• ./includes/functions.php
• ./includes/class_friendly_url.php
• ./includes/class_hook.php
• ./includes/class_bootstrap_framework.php
• ./vb/vb.php
• ./vb/phrase.php
• ./includes/functions_calendar.php
• ./includes/class_bbcode_alt.php
• ./includes/class_bbcode.php
• ./includes/functions_bigthree.php
• ./includes/functions_notice.php

Hooks Called (41):
• init_startup
• init_startup_session_setup_start
• database_pre_fetch_array
• database_post_fetch_array
• init_startup_session_setup_complete
• global_bootstrap_init_start
• global_bootstrap_init_complete
• cache_permissions
• fetch_foruminfo
• global_state_check
• global_bootstrap_complete
• global_start
• style_fetch
• global_setup_complete
• bbcode_fetch_tags
• bbcode_create
• bbcode_parse_start
• cache_templates
• cache_templates_process
• template_register_var
• template_render_output
• fetch_template_start
• fetch_template_complete
• parse_templates