Hello and welcome to our community! Is this your first visit?
Enjoy an ad free experience by logging in. Not a member yet? Register.

# Thread: Why is this function crashing???

1. ## Why is this function crashing???

Hi,

I'll try to explain what I was trying to do with this functions.

say you have four pairs of things, pair 1-1, 2-2, 3-3 and 4-4, and you want to swap one element of each pair and give it to another

example

1-4, 2-3, 3-1, 4,2

the only thing I want to make sure is:

1. No element can be paired with 'himself' so no '1-1 or 2-2' after the function.

and 2. No repeating assigned elements, so no '1-3, 2-3' after the function.

So this would be a way of permute numbers.

an this is how I tryed it:

Code:
```value = document.myform.three.value;

var x = new Array(value);

for(a=0;a<value;a++){

x[a]= 0;
}

function itera(){

value = document.myform.three.value;

for(var a=0; a<value; a++){

x[a] = Math.floor(Math.random()*value);

for (var b=a; b>=0; b=b-1){

if (x[a] == x[b] || x[a]==a){

do {
x[a]= Math.floor(Math.random()*value);
}

while(x[a] == a);

b=a;

}

else {

}

}```
being 'Value' the number of pairs to permute, which is an external input.

This function works fine some times but sometimes it crashes and I can't figure out why

I'd apreciate some help please. thanks.

PD: I don't care whether there is a specific function to permute numbers, I'd simply like to understand whats wrong with this one.

• if it crashes, it should leave a message in the Error Console

• Maybe because it's missing two curly brackets at the end
}}

If not fixed publish the rest of the code

• thanks,

seems I had some bugs in another part of the code.

• Your script craches when the last pair cannot be made.

e.g. if the first 3 pairs becomes 1-2 , 2-4 , 4-1.
then the only possible pair left is 3-3.
as it fails to validate, the script will try over and over again, but will never succeed.

In this case a swap between a random, already set second-value and the remaining second-value is needed

Code:
```<script>
value = document.myform.three.value;

Pairs=[];
for(var a=0; a<value; a++){
Pairs[a]=a+1;
}
SecondValues=Pairs.slice(0);
// --- Create all pairs but one --- //
for (x=0;x<Pairs.length-1;x++){
do {
C=Math.floor(Math.random()*SecondValues.length);
} while(Pairs[x]==SecondValues[C] );

Pairs[x]=[Pairs[x],SecondValues.splice(C,1)[0]];
}
// --- Test, and swap values if last pairs can't be valid. --- //
S=Math.floor(Math.random()*(Pairs.length-2));
if (Pairs[Pairs.length-1] == SecondValues[0]){
Pairs[Pairs.length-1]=[Pairs[Pairs.length-1],Pairs[S][1]];
Pairs[S][1]=SecondValues[0];
}else{
Pairs[Pairs.length-1]=[Pairs[Pairs.length-1],SecondValues[0]]
}
</script>```
this will create:
Code:
`Pairs = [[3, 1], [2, 4], [4, 3], [1, 2]]`
or alike;

•

#### Posting Permissions

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