 Gabrielus - 4 years ago 81
Java Question

# Generate sets of numbers which only have a difference of 1 from the last set of numbers in a 2d array

Problem: I want to generate random locations on a grid which are touching. The total number of locations is 5. Is there a more efficient/different way of doing the following code:

`````` /*
* 8        1       2
* 7    [original]  3
* 6        5       4
*/

int rand = 1 + (int)(Math.random() * ((8 - 1) + 1));
if(rand >= 2 && rand<= 4)
{
newx++;
}
else if(rand >=6 && rand<=8)
{
newx--;
}

//change y according to number
if(rand == 8 || rand == 1 || rand==2)
{
newy++;
}
else if(rand >= 4 && rand<= 6 )
{
newy--;
}
`````` Konstantinos Chalkias

I would advise on the use of `Random.nextInt(8)` Vs `Math.random()*8` (see here why). Because your current requirements seem to allow one "seed" only, you could declare a `static Random random = new Random();` in your class, so you just call `random.nextInt(8)` in your method.

``````int rand = random.nextInt(8); //0..7
if (rand < 3) //0,1,2
{
newx++;
}
else if (rand < 6) //3,4,5
{
newx--;
}

//change y according to number
if(rand % 3 == 0) //0,3,6
{
newy++;
}
else if(rand % 3 == 1) //1,4,7
{
newy--;
}
``````

As you may notice, the above has the same impact with your approach, but uses the modulo operation mainly for readability purposes, cause mod is not as fast as an `if` checking.

Small Edit by OP: (result of random represented graphically on x and y axis)

``````  6         3       0
5      [origin]   2
4         7       1
``````
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download