# Startposition in Array ermitteln



## Oskar (11. Dez 2006)

Hallo,

stehe gerade ziemlich auf dem Schlauch. Folgendes:

Ich hab ein Array 9 x 9 Felder. Diese Felder können nochmals in 9 Quadrate (3 x 3) eingeteilt werden (Beispiel ;-) ). Nun hab ich in meiner Klasse Chart (repräsentiert das Feld) eine Methode die da lautet

```
public IField[][] getSquare(int number)
```
Square steht hierbei für ein beschriebenes 3 x 3 Quadrat. Die 9 Quadrate sind durchnummeriert von oben links = 0 bis unten rechts = 8. Der Parameter number entspricht der Nummer des gefragten Quadrates.

Nun zur Frage: Wie komme ich am geschicktesten an die vertikale Startposition meines Quadrates?
Ich könnte zwar soetwas machen:

```
if(number < 3){
  line = 0;
}elseif(number > 2 && number < 6){
  line = 3;
}elseif(number > 5 && number <9){
  line = 6;
}
```
Aber irgendwie finde ich das nicht sehr schön. Gibt es hier einen Algorithmus der mir mittels modulo etc. die linie für das Startfeld meines Quadrates gibt? Ich komm nicht drauf.

Für die Spalte sollte das kein Problem sein hier komm ich mittels

```
column = (number%3) * 3
```
ziemlich schnell zum Ziel. Nur fehlt mir halt die Zeile. 
Jede Idee ist willkommen.

Cheers
Oskar


----------



## Roar (11. Dez 2006)

row = (number/3) * 3 :?: :autsch:


----------



## Oskar (11. Dez 2006)

Ich glaub es ist nicht ganz klar welches Feld ich suche. Daher mal eine kleine ASCII Grafik dazu:
Das Feld das ich brauche als Startfeld für meine Quadrate hab ich mit einem 'X' gekennzeichnet. Die Quadrate sind sonst durchnummeriert.

---------------------------------
| X | 0 | 0 | X | 1 | 1 | X | 2 | 2 |
| 0 | 0 | 0 | 1 | 1 | 1 | 2 | 2 | 2 |
| 0 | 0 | 0 | 1 | 1 | 1 | 2 | 2 | 2 |
---------------------------------
| X | 3 | 3 | X | 4 | 4 | X | 5 | 5 |
| 3 | 3 | 3 | 4 | 4 | 4 | 5 | 5 | 5 |
| 3 | 3 | 3 | 4 | 4 | 4 | 5 | 5 | 5 |
---------------------------------
| X | 6 | 6 | X | 7 | 7 | X | 8 | 8 |
| 6 | 6 | 6 | 7 | 7 | 7 | 8 | 8 | 8 |
| 6 | 6 | 6 | 7 | 7 | 7 | 8 | 8 | 8 |
---------------------------------

Wenn ich nun zum Beispiel 7 als Wert übergeben bekomme möchte ich als Spalte 3 und als Reihe 6 haben. Danach bau ich mir dann den Rückgabewert entsprechend des Quadrates 7 auf.



> row = (number/3) * 3 icon_question.gif autsch.gif



Funktioniert... ???:L  ..mom.. ???:L  ..vermutlich ziemlich gut. Man oh man jetzt wo ich nochmal genauer drüber nachdenke. Das ist ziemlich genau was ich gesucht habe....   :applaus: 

Danke. Die Welt kann soo einfach sein.


----------

