2010-07-27 11 views
1

J'essaie de prendre des tableaux 9x9, 12x12, 15x15, etc. et d'avoir le programme les interpréter comme plusieurs carrés de 3x3.Opération arithmétique pour que 0, 1 et 2 retournent 0 | 3, 4, & 5 return 1, etc

Par exemple:

0 0 1 0 0 0 0 0 0 
0 0 0 0 0 2 0 0 0 
0 0 0 0 0 0 0 3 0 
0 0 0 0 0 0 6 0 0 
0 0 4 0 0 0 0 0 0 
0 0 0 0 0 5 0 0 0 
0 0 0 0 0 0 0 0 0 
0 7 0 0 0 0 0 0 0 
0 0 0 0 8 0 0 0 9 

sera interprété comme:

0 0 1 | 0 0 0 | 0 0 0 
0 0 0 | 0 0 2 | 0 0 0 
0 0 0 | 0 0 0 | 0 3 0 
------+-------+------ 
0 0 0 | 0 0 0 | 6 0 0 
0 0 4 | 0 0 0 | 0 0 0 
0 0 0 | 0 0 5 | 0 0 0 
------+-------+------ 
0 0 0 | 0 0 0 | 0 0 0 
0 7 0 | 0 0 0 | 0 0 0 
0 0 0 | 0 8 0 | 0 0 9 

Où:

"1" @ [0][2] is in box "[0][0]" 
"2" @ [1][5] is in box "[0][1]" 
... 
"6" @ [3][6] is in box "[1][2]" 
... 
"9" @ [8][8] is in box "[2][2]" 

.

Je peux utiliser row % 3 et column % 3 pour déterminer les valeurs de ligne et de colonne dans la boîte, mais comment puis-je déterminer dans quelle boîte une valeur donnée dans le tableau est stockée?

Cette formule pourrait être utilisée dans une méthode telle que celle ci-dessous.

public int[] determineCoordinatesOfBox(int rowInArray, int columnColumnInArray) { 
    // determine row value 
    // determine column value 

    // return new int[2] with coordinates 
} 

Cela semble possible et je me suis passé la tête dessus. Peut-être que je fais un problème simple trop difficile?

Un grand merci pour l'aide!

  • Justian
+0

Comme indiqué ci-dessous, si vous utilisez l'opérateur/sur les entiers, cela fonctionnera correctement. Par exemple Row 2 et Column 3 seraient Box [0] [1] (colonnes de numérotation et lignes de 0). Cela semble être ce que vous voulez. –

+0

C'est si ridiculement simple. Je cherchais une formule alors que j'aurais dû regarder des concepts de nombres entiers débutants >> –

+0

Humiliation :(. –

Répondre

2

Vous êtes à la recherche de l'opérateur /:

box[0] = rowInArray/3; 
box[1] = columnInArray/3; 
+0

ajouter un 'min' à cela et tout ira bien (ce ne sera pas dans la boîte 3.6666 x 2.3333). – eykanal

+0

Je ne suis pas sûr si vous avez bien compris ma question. ( 0/3 = 0 = 0 | 1/3 = 0,33 = 0 | 3/3 = 1 = 1 | 4/3 = 1,33 = 1) –

+1

S'ils sont ints, alors 2/3 == 0. Si c'est un flotteur ou un double, vous aurez le problème attendu. – TreDubZedd

0

Si je comprends bien, il est juste division entière simple.

Puisque vous codez Java (ce serait la même chose dans au moins C, C++ et C#), il est tout simplement / opérateur:

int rowInArray = 3; 
int columnInArray = 7; 

int boxY = rowInArray/3; // will evaluate to 1 
int boxX = columnInArray/3; // will evaluate to 2 

int rowInBox = rowInArray % 3;  // will evaluate to 0 
int columnInBox = columnInArray % 3; // will evaluate to 1 

Il suffit de garder les deux arguments de nombre entier de division - 7/3 est 2 , mais 7/3.0 ou 7.0/3 sera 2.5.