Simon Baars - 4 years ago 125

Java Question

I have this totally normal loop over a 2 dimensional array.

`for(int i = 0; i<array.length; i++){`

for(int j = 0; i<array.length; j++){

array[i][j].doSomething();

}

}

I want to go through this 2 dimensional array, starting in the middle. For example, if the array has a length of 100 for both dimensions, I want it to go over it like this:

`array[50][50] //middle of array`

array[49][50] //x-1

array[50][49] //y-1

array[51][50] //x+1

array[50][51] //y+1

array[48][50] //x-2

array[49][49] //x-1 and y-1

array[50][48] //y-2

array[51][49] //x+1 and y-1

array[52][50] //x+2

array[51][51] //x+1 and y+1

array[50][52] //y+2

array[49][51] //x-1 and y+1

etc.

I've been spending hours on finding an efficient way and finding a solution on the internet, but I haven't found a great answer yet. Anyone who knows how to do this?

Recommended for you: Get network issues from **WhatsUp Gold**. **Not end users.**

Answer Source

The basic looop is as follows -

```
K=1;
while(true) {
k=K-1;
for(n=0; n<=k; n++)
x=-k+n; y=-n;
for(n=1; n<=k; n++)
x=n; y=-k+n;
for(n=1; n<=k; n++)
x=k-n; y=n;
for(n=1; n<=k-1; n++)
x=-n; y=k-n;
if x out of bounds or y out of bounds continue;
K++;
if(K>N/2) break;
}
```

where N is the size of the array (width or height) and K is the cycle where K=1 at the center.

To find the x y coordinates you go in four loops upper left upper right .... - and since the coordinate system is located at N/2, N/2 you have to add that to x y. There are K+2(K-1)+(K-2) elements in each cycle

Recommended from our users: **Dynamic Network Monitoring from WhatsUp Gold from IPSwitch**. ** Free Download**