# Thread: [RESOLVED] randomArray with exceptions

1. Registered User
Join Date
Oct 2009
Posts
9

## [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]

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;
}
</script>```

3. Registered User
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>```

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. Registered User
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. 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.

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

#### Posting Permissions

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

"

"

## X vBulletin 4.2.2 Debug Information

• Page Generation 0.14464 seconds
• Memory Usage 2,903KB
• Queries Executed 15 (?)
Template Usage (34):
• (7)bbcode_code
• (2)bbcode_quote
• (1)footer
• (1)forumjump
• (1)forumrules
• (1)gobutton
• (6)memberaction_dropdown
• (1)navbar
• (1)navbar_moderation
• (1)navbar_noticebit
• (1)navbar_tabs
• (2)option
• (6)postbit
• (6)postbit_onlinestatus
• (6)postbit_wrapper
• (1)spacer_close
• (1)spacer_open
• (1)tagbit_wrapper

Phrase Groups Available (6):
• global
• inlinemod
• postbit
• posting
• reputationlevel
Included Files (26):
• ./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/functions_bigthree.php
• ./includes/class_postbit.php
• ./includes/class_bbcode.php
• ./includes/functions_reputation.php
• ./includes/functions_notice.php
• ./packages/vbattach/attach.php
• ./vb/types.php
• ./vb/cache.php
• ./vb/cache/db.php
• ./vb/cache/observer/db.php
• ./vb/cache/observer.php

Hooks Called (73):
• init_startup
• friendlyurl_resolve_class
• 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_postinfo_query
• fetch_postinfo
• fetch_foruminfo
• global_state_check
• global_bootstrap_complete
• global_start
• style_fetch
• global_setup_complete
• strip_bbcode
• friendlyurl_clean_fragment
• friendlyurl_geturl
• forumjump
• cache_templates
• cache_templates_process
• template_register_var
• template_render_output
• fetch_template_start
• fetch_template_complete
• parse_templates
• notices_check_start
• notices_noticebit
• process_templates_complete
• friendlyurl_redirect_canonical
• bbcode_fetch_tags
• bbcode_create
• postbit_factory
• postbit_display_start
• postbit_imicons
• bbcode_parse_start
• bbcode_parse_complete_precache
• bbcode_parse_complete
• postbit_display_complete
• memberaction_dropdown
• tag_fetchbit
• tag_fetchbit_complete
• forumrules
• navbits
• navbits_complete