2011-12-04 9 views
0

私は16×16グリッドのオブジェクトを使用する2Dセルオートマトンを作成しています。オブジェクトは、グリッドを表す多次元配列に格納されます。次世代の値を計算するには、周囲のセルの状態をチェックする必要があります(オンまたはオフのいずれか)。チェックするセルがグリッドの端にある場合は、グリッドを囲むようにメソッドをラップしたいと考えています。Processing.Org:Modulo Issue

私は以下のメソッドを使用してこれを実行していますが、モジュロオペレータ:

// Scan neighbours, find out how many are active 
int findNeighbours(int x, int y) { 

int count = 0; 

for(int i = -1; i<1; i++) { 
    for(int j = -1; j<1; j++) { 

    // Grid size is 16 
    int xPos = (x+i)%gridSize; 
    int yPos = (y+j)%gridSize; 

    // Check state 
    if(grid[xPos][yPos].on == true) { 
     count++; 
    } 
    } 
    } 
return count++; 
} 

問題は、私が期待していること、である。その代わり

(-1) mod 16 = 15 

、私が取得:

(-1) mod 16 = -1 

範囲外のエラーが発生しました。

ここには何が起こっていますか?

+0

http://www.google.de/search?gcx=w&sourceid=chrome&ie=UTF-8&q=google#sclient=psy-ab&hl=de&source=hp&q=-1+mod+16&pbx=1&oq=-1+mod + 16&aq = f&aqi =&aql =&gs_sm = e&gs_upl = 3395l4419l1l4825l2l2l010l010l201l267l1.0.1l2l0bav = on.2、または.r_gc.r_pw。、cf.osb&fp = 59859e79c7804486&biw = 1280&bih = 686 –

+0

Javaではなく、確かに:http://www.velocityreviews .com/forums/t388345-mod-of-a-negative-number.html –

答えて

1

除数を正の値になるまで除数に加えることができます。

5 % 16 = 5 

(5 + 16) % 16 = 5 

(-1 + 16) % 16 = 15 

は、私はJavaは私ができるよりもはるかに優れた%演算子を評価する理由アンドレアスさんのコメントが説明すると思いますが、うまくいけば、これはあなたの問題を解決:この作品、なぜいくつかの例を表示します。