# 2D Array umdrehen



## Carole (9. Aug 2005)

Hallo!
Ich hab ein Problem mit einer Aufgabe die darin besteht ein 2D array in die umgekehrte Reihenfolge zu bringen. Wenn man also zBsp hat 1 2 3 4   soll nachher   4 3 2 1  rauskommen ( das ganze nur halt im 2D). Es geht aber nicht darum im print etwas zu ändern, sondern es soll ein neuer array entstehen ( oder der alte soll verändert werden.
Hier der code den ich bis jetzt geschrieben habe:



```
public class Invert{
    public static int[][] InvertTab( int[][] array ) {
        int i = 0, j = 0;
        int k = array.length;
        int l = array[i].length;
        int list[][] = new int[k][l];

        for (i = 0; i <= array.length - 1; i++) {
            for (j = 0; j <= array[i].length - 1; j++) {
                for (k = list.length - 1; k >= 0; k--) {
                    for (l = list[k].length - 1; l >= 0; l--) {

                        list[k][l] = array[i][j];
                    }
                    break;
                }
            }
        }
        return list;
    }

    public static void PrintTab( int[][] tab ) {
        for (int i = 0; i < tab.length; i++) {
            for (int j = 0; j < tab[i].length; j++) {
                System.out.print(tab[i][j] + "\t ");
            }
            System.out.println("");
        }
    }

    public static void main( String[] args ) {
        int tab[][] = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 } };
        System.out.println("Original Tab");
        PrintTab(tab);
        System.out.println("");

        System.out.println("Inverted Tab");
        int[][] list = InvertTab(tab);
        PrintTab(list);
        System.out.println("");
    }
}
```


das programm läuft ja auch, aber in meinem Inverted Tab stehen nur 5en  ( wenn ich den break rausnehme ist es nur die 8 )
könnte mir bitte jemand helfen meinen fehler zu finden??
ich such noch ein bisschen in meinen büchern weiter.... :###

_[Edit by Beni: ein "paar" Leerzeichen weniger, ein paar Klammern mehr]_


----------



## Bleiglanz (9. Aug 2005)

was willst du machen:

in jeder Zeile deines Arrays die Reihenfolge umdrehen


```
int k = array.length;
         int l = array[i].length;
         int list [] [] = new int [k] [l];
```
ist doch schon falsch? 
warum sollen im neuen alle zeilen so lange sein wie array[0]??


----------



## mic_checker (9. Aug 2005)

willst du zeilen in umgekehrte Reihenfolge bringen oder spalten ?

Ursprung:
123
456
789

Danach:
321
654
987

Oder:
789
456
123

Oder:
987
654
321

?


----------



## Carole (9. Aug 2005)

warum ist das denn falsch? mein array2 soll doch die gleichen dimensionen haben wie array1....
also es soll sein:
1 2 3
4 5 6
und herauskommen soll
6 5 4 
3 2 1


----------



## Bleiglanz (9. Aug 2005)

immer vorausgesetzt, dass alle Zeilen gleich lang sind, sorry

na dann?


```
{   
           zeilen = array.length-1;
          spalten = array[0].length -1;
           for ( i=0; i<zeilen; i++){
               for ( j=0; j<spalten; j++) {                                                      
                     list [i][j] = array[zeilen-i-1][spalten-j-1];
              }       
}
```


----------



## Beni (9. Aug 2005)

Wie man einen X[]-Array umstellen würde, weisst du ja (oder kannst es leich erraten):

```
X[] xs;
for( int i = 0; i < xs.length/2; i++ ){
  X temp = xs[i];
  xs[i] = xs[ xs.length - i  - 1];
  xs[ x.length - i - 1] = temp;
}
```
(ich hoffe, ich hab mich niergends vertippt).

Der Witz an "2-dimensionalen Arrays" ist: es gibt keine 2d-Arrays in Java. Es sind Arrays von Arrays!

Das heisst, du kannst für das "X" dort oben auch "int[]" einsetzen, und würdest damit die Zeilen eines "int[][]" umdrehen.

Hm, ich lasse es mal mit weiteren Tipps, eigentlich musst du jetzt nur noch zweimal Copy&Paste machen 8)

_[Edit (19:24): ein paar "s" in den Code eingefügt, so kompiliert er wenigstens...]_


----------



## Carole (9. Aug 2005)

und wieder was dazu gelernt!   
Ihr seid echt super!
vielen dank!


----------



## Carole (9. Aug 2005)

war ich wohl ein bisschen zu schnell... klappt doch nicht   hab immer ein "ArrayIndexOutOfBoundsException:1"
heisst das eigentlich dass das programm übers array rausgeht?


----------



## Beni (9. Aug 2005)

Ja, irgendein Array hat Länge 0 oder 1, und das Progi versucht auf Element 1 (also, das zweite Element) zuzugreiffen.

Wie sieht denn dein aktueller Code aus?


----------



## Carole (10. Aug 2005)

ich hab nur mein for {} ersetzt, sieht im ganzen also so aus:

```
public class Invert
{ 
public static int[][] InvertTab( int[][] array ) 
{ 
int i = 0, j = 0; 
int k = array.length-1; 
int l = array[i].length-1; 
int list[][] = new int[k][l]; 

 
for ( i=0; i<k; i++)
{ 
for ( j=0; j<l; j++) 
{ 
[color=darkred]list [i][j] = array[k-i-1][l-j-1];[/color]  // diese zeile zeigt er beim kompilieren an

} 
} 
} 
return list; 
} 

public static void PrintTab( int[][] tab ) { 
for (int i = 0; i < tab.length; i++) { 
for (int j = 0; j < tab[i].length; j++) { 
System.out.print(tab[i][j] + "\t "); 
} 
System.out.println(""); 
} 
} 

public static void main( String[] args ) { 
int tab[][] = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 } }; 
System.out.println("Original Tab"); 
PrintTab(tab); 
System.out.println(""); 

System.out.println("Inverted Tab"); 
int[][] list = InvertTab(tab); 
PrintTab(list); 
System.out.println(""); 
} 
}
```


----------



## Bleiglanz (10. Aug 2005)

int list[][] = new int[k][l];

du hast ja bei k und i schon eins abgezogen


----------



## Carole (10. Aug 2005)

und das heisst? kriegs trotzdem nicht hin...
sitz wohl ein bisschen auf der leitung  :wink:


----------



## Bleiglanz (10. Aug 2005)

```
int i = 0, j = 0;
int k = array.length-1;
int l = array[i].length-1;
int list[][] = new int[k][l];
```

list hat eine zeile zu wenig

und in jeder zeile eine spalte zu wenig


----------



## Carole (10. Aug 2005)

soll es also so sein?

```
int i=0, j=0;
	      int k = array.length;
	      int l = array[i].length;
	      int list [] [] = new int [k] [l];
```
klappt aber auch nicht....


----------



## Bleiglanz (10. Aug 2005)

in dem fall musst du in der for schleife wieder jeweils 1 abziehen


----------



## Carole (10. Aug 2005)

hilft auch nix..... ???:L


----------



## Bleiglanz (11. Aug 2005)

wie sieht dein InvertTab jetzt aus?


----------



## Carole (13. Aug 2005)

so:

```
int i=0, j=0; 
         int k = array.length; 
         int l = array[i].length; 
         int list [] [] = new int [k] [l];

for ( i=0; i<k; i++)  
for ( j=0; j<l; j++) 
list [i][j] = array[k-1][l-1];  // und hier klappts nicht
```


----------



## Bleiglanz (13. Aug 2005)

k und l sind doch konstant??

list _[j] = array[k-i-1][l-i-1];_


----------

