Hey All,
I have a situation where I have eight variables that all need to pick a random number (1-8) but I don't want any of them to have the same number (so if variable1=5 I don't want the other seven variables to be able to pick 5)?
Right now the code I'm using to do this is long and bulky.Ã, Does anyone have suggestions for a better, more efficient way? (I think duplicates occasionally slip through)
int pran1;
int pran2;
int pran3;
int pran4;
int pran5;
int pran6;
int pran7;
int pran8;
int pran9;
pran1=Random(7)+1;
//weeding out duplicates
pran2=Random(7)+1;
if (pran2==pran1) {
Ã, while (pran2==pran1) {
Ã, Ã, Ã, pran2=Random(7)+1;
Ã, Ã, Ã, }
}
pran3=Random(7)+1;
if ((pran3==pran1) || (pran3==pran2)) {
Ã, Ã, while ((pran3==pran1) || (pran3==pran2)) {
Ã, Ã, Ã, Ã, pran3=Random(7)+1;
Ã, Ã, }
}
pran4=Random(7)+1;
if ((pran4==pran3) || (pran4==pran2) || (pran4==pran1)) {
Ã, Ã, while ((pran4==pran3) || (pran4==pran2) || (pran4==pran1)) {
Ã, Ã, Ã, pran4=Random(7)+1;
Ã, Ã, }
}
pran5=Random(7)+1;
if ((pran5==pran3) || (pran5==pran2) || (pran5==pran1) || (pran5==pran4)) {
Ã, Ã, while ((pran5==pran3) || (pran5==pran2) || (pran5==pran1) || (pran5==pran4)) {
Ã, Ã, Ã, pran5=Random(7)+1;
Ã, Ã, }
}
pran6=Random(7)+1;
if ((pran6==pran3) || (pran6==pran2) || (pran6==pran1) || (pran6==pran4) || (pran6==pran5)) {
Ã, while ((pran6==pran3) || (pran6==pran2) || (pran6==pran1) || (pran6==pran4) || (pran6==pran5)) {
Ã, Ã, Ã, pran6=Random(7)+1;
Ã, Ã, }
}
pran7=Random(7)+1;
if ((pran7==pran3) || (pran7==pran2) || (pran7==pran1) || (pran7==pran4) || (pran7==pran5) || (pran7==pran6)) {
Ã, Ã, while ((pran7==pran3) || (pran7==pran2) || (pran7==pran1) || (pran7==pran4) || (pran7==pran5) || (pran7==pran6)) {
Ã, Ã, Ã, pran7=Random(7)+1;
Ã, Ã, }
}
pran8=Random(7)+1;
if ((pran8==pran3) || (pran8==pran2) || (pran8==pran1) || (pran8==pran4) || (pran8==pran5) || (pran8==pran6) || (pran8==pran7)) {
Ã, while ((pran8==pran3) || (pran8==pran2) || (pran8==pran1) || (pran8==pran4) || (pran8==pran5) || (pran8==pran6) || (pran8==pran7)) {
Ã, Ã, Ã, pran8=Random(7)+1;
Ã, Ã, }
}
I know I can make it slightly shorter by using an int array (instead of eight seperate variables) so it's on my to-do list, but not priority.
Thanks for your help in advance.
visionmind
use an array instead of pran1-8?
int pran[9];
bool taken[9];
int i=1;
int rd;
bool done;
while (i<=8) {
Ã, done=false;
Ã, while(!done) {
Ã, Ã, rd=Random(7)+1;
Ã, Ã, if (!taken(rd)) {
Ã, Ã, Ã, pran[i]=rd;
Ã, Ã, Ã, taken[rd]=true;
Ã, Ã, Ã, done=true;
Ã, Ã, }
Ã, }
Ã, i++;
}
This is my version. It hasn't been properly tested but I think it should work.
int pran[9];
int i=0;
int temp;
while (i < 9) {
Ã, pran[i] = Random(7)+1;
Ã, temp=0;
Ã, Ã, while (temp < i) {
Ã, Ã, Ã, if (pran[i] == pran[temp]) {
Ã, Ã, Ã, Ã, pran[i] = Random(7)+1;
Ã, Ã, Ã, Ã, temp--;
Ã, Ã, Ã, }
Ã, Ã, Ã, temp++;
Ã, Ã, }
Ã, i++;
}
It seems that KhrisMUC was faster. :P
Wow, thank guys for your help guys. This will be extremely valuable for me, especially the introduction to bools.
Babar, yeah, that's what I meant, using a int pran[9] array instead of pran1-pran8.
Thanks everyone.
visionmind