[SOLVED] Math problem with array .length

I believe this is quite simple. But I have never been good at math so I ask here before doing some thing dumb. In my game the world is build up in chunks, which is 32x32 tiles. The problem I have is moving a object to another chunk. It works as long as the coordinates are not negative. But if they are, it won’t work. I have tried to do it on my own. But what that would require is an awful if statement to handles negative coordinates, and I think it could be done without an if statement

here is the code I have got working so far. I remove all attempts to do negative coordinates

int chunkX = getChunkX() + (x / Chunk.SIZE);
int chunkY = getChunkY() + (y / Chunk.SIZE);
        
x = x%Chunk.SIZE;
y = y%Chunk.SIZE;

so what needs to happened. If a object is at 0,0 in chunk 5,5 and gets a order to move to 0,-1 the coordinates most change to 0,31 chunk 5,4

EDIT: I going to try to make it easier to understand.

I have big and small arrays set up like this.

http://fc01.deviantart.net/fs70/f/2013/232/4/3/untitled_by_yemto-d6iy9pv.png

The P is the player/Object. Now I want to move him to 3,-1 which would result in java.lang.ArrayIndexOutOfBoundsException So instead I want to move the Player/Object to 3x8 but in the big 0,-1 array. The problem is I don’t know the math I need to do so I get the right big array, and the small array coordinates.

chunkX and chunkY is the big array x and y
x and y is the small array x and y

This might help you.

I don’t get it.

To wrap on an axis (both positive and negative) do this:

x = (((x+n) % DIM) + DIM) % DIM

Thank you so much. Me and some guys at work went nuts over this problem. It’s finally fixed.

Here is the code I ended up using. Just to see if someone sees any issues.

public void setTileFromWorld(Tile t, int x, int y){
    int DIM = Chunk.SIZE;

    int cx = (int)Math.floor(x / (double)DIM);
    x = ((x % DIM) + DIM) % DIM;

    int cy = (int)Math.floor(y / (double)DIM);
    y = ((y % DIM) + DIM) % DIM;

    for(Chunk c : chunks){
        if(cx == c.getX() && cy == c.getY()){
            c.setTile(t, x, y); return;
        }
    }
    /*
    System.err.println("An error occurred while trying to place a tile");
    System.err.println("Chunk X: "+cx+" X: "+x);
    System.err.println("Chunk Y: "+cy+" Y: "+y);
    System.err.println(t);*/
}