2D Array umdrehen

Status
Nicht offen für weitere Antworten.

Carole

Mitglied
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:


Code:
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

Gesperrter Benutzer
was willst du machen:

in jeder Zeile deines Arrays die Reihenfolge umdrehen

Code:
        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

Top Contributor
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

Mitglied
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

Gesperrter Benutzer
immer vorausgesetzt, dass alle Zeilen gleich lang sind, sorry

na dann?

Code:
      {   
           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];
              }       
}
 
B

Beni

Gast
Wie man einen X[]-Array umstellen würde, weisst du ja (oder kannst es leich erraten):
Code:
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

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

Beni

Gast
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

Mitglied
ich hab nur mein for {} ersetzt, sieht im ganzen also so aus:
Code:
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

Gesperrter Benutzer
Code:
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

Mitglied
soll es also so sein?
Code:
int i=0, j=0;
	      int k = array.length;
	      int l = array[i].length;
	      int list [] [] = new int [k] [l];
klappt aber auch nicht....
 

Carole

Mitglied
so:
Code:
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
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben