Methoden Array horizontal spiegeln

Diskutiere Array horizontal spiegeln im Java Basics - Anfänger-Themen Bereich.
Z

Zukami

Hallo zusammen,
Ich habe als Aufgabe eine Methode zu schreiben, welche ein Zweidimensionales Array horizontal spiegelt. Am Schluss müssen aber das Original sowie das gespiegelte Array auf der Console ausgegeben werden.

Folgende Strukturen sind schon vorgegeben:
char[][] inputArray = {{'1', '0', '1'}, {'1', '1', '1'}};
char[][] mirroredArray = mirrorArray(inputArray);
print2DArray(inputArray);
System.out.println("---");
print2DArray(mirroredArray);

Objektorientierte Programmierung hatten wir dabei noch nicht.
Mein Problem ist vor allem der Ausdruck char[][] mirroredArray = mirrorArray(inputArray); ich weiss nicht so wirklich was ich mit dem anfangen soll.

Mein Ansatz bisher war folgender:

public static void main( String[] arg )
{
char [][] inputArray = {{'1', '0', '1'}, {'1','1','1'}}; // Array deklariere und konstruieren
print2DArray(inputArray); //Output Array
System.out.println("---"); // Output ---
mirrorArray(inputArray); //Output horizontal gespiegeltes Array
}
// Originales Array ausgeben
public static void print2DArray(char inputArray[][])
{
for ( int zeile = 0; zeile < inputArray.length; zeile++ )
{
for ( int spalte=0; spalte < inputArray[zeile].length; spalte++ )
System.out.print( inputArray[zeile][spalte] );
System.out.println();
}
}
// das horizontal gespiegelte Array ausgeben
private static void mirrorArray(char inputArray [][]) {

for (int zeile = inputArray.length -1; zeile >=0; zeile --)
{
for (int spalte = inputArray.length; spalte >=0; spalte --)

System.out.print( inputArray[zeile][spalte] );
System.out.println();
}
}

Der Output auf der Console wäre der Richtige.
101
111
---
111
101

Das Problem ist nun nur, dass ich von der Vorgabe abweiche. Hat jemand eine Idee, wie ich meinen Code abändern muss, um der Vorgabe zu entsprechen?
Btw ich glaube ich habe Zeile und Spalte verwechselt also nicht verwirren lassen ^^
 
MoxxiManagarm

MoxxiManagarm

Mein Problem ist vor allem der Ausdruck char[][] mirroredArray = mirrorArray(inputArray); ich weiss nicht so wirklich was ich mit dem anfangen soll.
Das ist nichts anderes als ein Methodenaufruf. Grundsätzlich hast du diese Methode schon, aber deine Methode braucht einen return type, nicht void. So:

Java:
private static char[][] mirrorArray(char inputArray [][]) {
 
J

JustNobody

Also horizontal spiegeln wäre jetzt für mich aus 1 2 3 ein 3 2 1 zu machen. Das was du gemacht hast, wäre für mich vertikal. (Bei deinem Beispiel wäre die Spiegelung wieder das Original)

Aber unabhängig von Horizontal / Vertikal: wenn du es ausgeben kannst, dann kannst du doch bestimmt auch die Werte zuweisen.

Das Ziel Array hat welche Größe? -> ein neues Array dieser Größe erzeugen.
Dann in den Schleifen halt statt einer Ausgabe die Zuweisung machen.
 
MoxxiManagarm

MoxxiManagarm

BTW
Lass dich nicht so sehr von dem Begriff Spiegelung irritieren. Schaue dir nur das erwartete Ergebnis genau an. Es ist nichts anderes als eine umgekehrte Reihenfolge der Zeilen. Ein 2D-Array ist nichts anderes als ein einfaches Array, dessen Elemente wiederum Arrays sind. Stell dir vielleicht erst einmal vor, wie du ein einfaches Arrays aus Strings spiegeln würdest, dann tauschst du diese Strings durch Arrays aus.
 
Z

Zukami

Das ist nichts anderes als ein Methodenaufruf. Grundsätzlich hast du diese Methode schon, aber deine Methode braucht einen return type, nicht void. So:

Java:
private static char[][] mirrorArray(char inputArray [][]) {
Das Problem ist, wenn ich die methode folgendermassen aufrufe:
public static void main( String[] arg )
{
char [][] inputArray = {{'1', '0', '1'}, {'1','1','1'}}; // Array deklariere und konstruieren
char [][] mirroredArray = mirrorArray(inputArray);

print2DArray(inputArray); //Output Array
System.out.println("---"); // Output ---
print2DArray(mirroredArray); //Output horizontal gespiegeltes Array
}

// Originales Array ausgeben
public static void print2DArray(char inputArray[][])
{

for ( int zeile = 0; zeile < inputArray.length; zeile++ )
{
for ( int spalte=0; spalte < inputArray[zeile].length; spalte++ )
System.out.print( inputArray[zeile][spalte] );
System.out.println();
}
}
// das horizontal gespiegelte Array ausgeben
private static char [][] mirrorArray(char inputArray [][]) {

for (int zeile = inputArray.length -1; zeile >=0; zeile --)
{
for (int spalte = inputArray.length; spalte >=0; spalte --)

System.out.print( inputArray[zeile][spalte] );
System.out.println();

}
return inputArray;

}


Dann habe ich als Output auf der Console folgendes:
111
101
101
111
---
101
111

Und ich verstehe auch nicht wieso der nun so ist...
Mir ist zwar klar, dass ich mit dem system.outprintln und dem darauffolgenden return sozusagen doppelt ausgebe, ich weiss aber nicht wie ich das fixen soll...
 
Z

Zukami

Also horizontal spiegeln wäre jetzt für mich aus 1 2 3 ein 3 2 1 zu machen. Das was du gemacht hast, wäre für mich vertikal. (Bei deinem Beispiel wäre die Spiegelung wieder das Original)

Aber unabhängig von Horizontal / Vertikal: wenn du es ausgeben kannst, dann kannst du doch bestimmt auch die Werte zuweisen.

Das Ziel Array hat welche Größe? -> ein neues Array dieser Größe erzeugen.
Dann in den Schleifen halt statt einer Ausgabe die Zuweisung machen.
Ich sollte vielleicht noch dazufügen, dass das Array ungespiegelt so aussehen sollte:
101
111

Ziel ist dann folgender Output:
101
111
---
111
101
 
Z

Zukami

BTW
Lass dich nicht so sehr von dem Begriff Spiegelung irritieren. Schaue dir nur das erwartete Ergebnis genau an. Es ist nichts anderes als eine umgekehrte Reihenfolge der Zeilen. Ein 2D-Array ist nichts anderes als ein einfaches Array, dessen Elemente wiederum Arrays sind. Stell dir vielleicht erst einmal vor, wie du ein einfaches Arrays aus Strings spiegeln würdest, dann tauschst du diese Strings durch Arrays aus.
Am Anfang habe ich mich sehr von dieser Spiegelung irritieren lassen,habe danach aber versucht diese "Spiegelung" in der 2. Methode durch das ausgeben des Arrays von hinten nach vorne zu erreichen.
 
MoxxiManagarm

MoxxiManagarm

Du darfst keine Ausgabe in mirrorArray machen. Du musst ein neues Array zusammenbauen.
Java:
private static char [][] mirrorArray(char inputArray [][]) {
  char[][] mirroredArray = xxx;  // xxx musst du einfügen, bei mir nur ein Platzhalter
  
  // hier baust du mirroredArray inhaltlich zusammen

  return mirroredArray;
}
 
T

temi

Du darfst in der Methode mirrorArray() nichts ausgeben. In der Methode musst du ein neues Array erstellen, welches das im Parameter übergebene Array spiegelt und anschließend returned.
 
Z

Zukami

Du darfst keine Ausgabe in mirrorArray machen. Du musst ein neues Array zusammenbauen.
Java:
private static char [][] mirrorArray(char inputArray [][]) {
  char[][] mirroredArray = xxx;  // xxx musst du einfügen, bei mir nur ein Platzhalter
 
  // hier baust du mirroredArray inhaltlich zusammen

  return mirroredArray;
}
kann ich um den mirreredarray inhaltlich aufzubauen diesen code unten beibehalten oder ist der unnützlich?

for (int zeile = inputArray.length -1; zeile >=0; zeile --)
{
for (int spalte = inputArray.length; spalte >=0; spalte --)
 
MoxxiManagarm

MoxxiManagarm

Ja, aber das innere Array (Zeile) verändert sich doch nicht. Das kannst du so nehmen wie es kommt


Kleine Hilfestellung:
Java:
char[][] array = {{'1', '2'},{'3','4'}};
char[] ersteZeileVomArray = array[0];
 
Zuletzt bearbeitet:
Z

Zukami

Ja, aber das innere Array (Zeile) verändert sich doch nicht. Das kannst du so nehmen wie es kommt
private static char [][] mirrorArray(char inputArray [][]) {

char [][] mirroredArray = {{'1', '0', '1'}, {'1','1','1'}};

for (int zeile = inputArray.length -1; zeile >=0; zeile --)
{
for (int spalte = inputArray.length; spalte >=0; spalte --)


}
return mirrorArray;

}

also ich habe jetzt mal die Methode bis hierhin.
Das innere array könnte ich theoretisch weglassen. Das Problem ist jetzt aber noch dass ich ja noch einen Befehl geben muss, was nach dieser Schleife damit gemacht werden muss...
Kannst du mir das vielleicht sagen?
 
T

temi

Würdest du bitte die Code-Tags verwenden? Die drei Punkte rechts vom Smiley - Code - Java.
Java:
private static char [][] mirrorArray(char inputArray [][]) {

    char [][] mirroredArray = {{'1', '0', '1'}, {'1','1','1'}}; // dieses Array soll anfangs leer sein!

    // ab hier füllst du das neue Array mit den Daten aus inputArray
    for (int zeile = inputArray.length -1; zeile >=0; zeile --) {
        for (int spalte = inputArray.length; spalte >=0; spalte --)
    }
  
    return mirrorArray; // hier das Array "mirroredArray" zurückgeben!
}
 
Zuletzt bearbeitet:
Thema: 

Array horizontal spiegeln

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben