# Informatik 1 - 2D Array sortieren



## Timm3012 (8. Feb 2015)

Was wäre die einfachste Lösung für diese Aufgabe.
Grüße
Timm


----------



## Saheeda (8. Feb 2015)

Naja, ein 2D-Array ist ja im Grunde nur ein Array von Arrays, also aufgemalt ungefähr so:

[1][1.1][1.2]
[2][2.1][2.2]
[3][3.1][3.2]

Ich würde hier von oben nach unten durchgehen: erst schauen, ob alle 1. Stellen der Arrays gefüllt sind, danach alle 2. Stellen etc.


----------



## Timm3012 (8. Feb 2015)

Und das bedeutet in Quelltext :shock: ?


----------



## Ruzmanz (8. Feb 2015)

> Was wäre die einfachste Lösung für diese Aufgabe.



In einem Forum fragen und hoffen, dass jemand die Aufgabe erledigt. Einfacher könnte ich die Aufgabe nicht lösen. Mal schauen ob das klappt ...


----------



## Anfänger2011 (8. Feb 2015)

Wenn du genauer schilderst was du an Saheedas Aussage nicht verstanden hast, dann kann man dir auch bestimmt helfen.


----------



## minzee (8. Feb 2015)

Nachdem mir langweilig war, habe ich eine Lösung versucht:

```
class Main
{
   public static void main(String[] args)
   {
      // Pferde:
      String a[] = {"jj", "", "mlp", "ko", "", "bs", "w", ""};
            
      int count = 4;
      for(int i = 0; i < 2; ++i)
      {
         int last = (i + 1) * count;
         
         // erstes leeres Feld suchen:
         int j = i * count;
         while(j < last && a[j] != "")
         {
            ++j;
         }
         // sortieren:
         for(int k = j; k < last; ++k)
         {
            if(a[k] != "")
            {            
               a[j] = a[k];
               a[k] = "";
               j = k;
            }
         }
      }
      
      // ausgeben:
      for(int i = 0; i < a.length; ++i)
      {
         System.out.println(a[i]);
      }
   }
}
```


----------



## minzee (8. Feb 2015)

Da ist noch ein Fehler.
Statt j = k gehört ++j


----------



## Timm3012 (8. Feb 2015)

Also ich würde als erstes eine Kopie erzeugen

public String [][] consilidate (String[1][3] Pferdestall) {

\\Kopie 
String [][] sorted  = new String [1][3];
for(int y=0; y<1;y++) {
 for(int x=0; i<3;i++) {
  sorted[x][y] = Pferdestall[x][y];
}
}

Mein Problem wäre jetzt das ich nicht weiß wie ich mit 2 Schleifen jedes Feld durchlaufe, überprüfe ob der Wert = null ist, überprüfe das dass nächste Objekt nicht gleich null ist und es dann aufrücken lasse.
Das hat hier auch gar nichts mit Faulheit zu tun ich hab einfach grade nur ein Verständnis Problem und das liegt größenteils an dem 2D Array.
Ich komme aus dem php bereich und da ist es viel einfacher


----------



## minzee (8. Feb 2015)

Bei einem sort werden normalerweise die ursprünglichen Daten sortiert. Es wird also keine Kopie angelegt und die dann zurückgegeben. Wenn du PHP kennst, kennst du vielleicht auch PHP: sort - Manual Dort ist das auch so.


----------



## Ruzmanz (8. Feb 2015)

In PHP ist er auch nicht so stark ... Bei einem Array gibst du immer die tatsächliche Größe an. Wenn du auf einzelne Elemente zugreifen willst, musst du 1 abziehen.


```
String[][] horses = // new String[2][4];
			{
				{"J", null, "M", "K"},
				{"B", null, null, "W"}
			};
```

In deinem Fall kannst du dir die erste Reihe rausgreifen, sodass du nur noch ein 1D-Array bekommst:

String firstRow = horses[0];
String secoundRow = horses[1];

// sortiere firstRow ...
// sortiere secoundRow ...

ODER besser:

for(int i = 0; i < horses.length; i++) {
  // sortiere horses[1];
}


----------

