Methode, die eine 2 dimensionale Matrix kopiert.

tolgatus

Mitglied
Guten Abend,

Aufgabe war es, eine Methode zu schreiben, die eine beliebige zweidimensionale Matrix kopiert, die nicht unbedingt quadratisch sein muss.

Nun habe ich diese Methode:

Java:
public class MatrixKopierer {
    double[][] a, b;
    
   double[][] matrixCopy( double[][] a)
   { double[][] b = new double[a.length][a[0].length];
   for ( int i = 0; i< a.length; i= i+1 )
       for ( int j = 0; j< a[i].length; j= j+1 )
           b[i][j] = a[i][j];
   return b;
   }

Verstehe ich richtig, dass [a[0].length] statt [a.length] und in der Schleife a.length statt a.length für den Fall sind, dass keine quadratische Matrix kopiert werden soll, sondern eben eine beliebige?
Vielen Dank und sorry für die vielleicht banale Frage :)

MfG
 

diggaa1984

Top Contributor
das ganze macht peng, wenn a[0].length kleiner als irgendein a.length ist! Denn b ist quadratisch und in dem Fall hat b nicht ausreichend Felder, wenn a.length > a[0].length
 

maxemann96

Mitglied
Wie wärs mit
Java:
public class MatrixKopierer 
{
    double[][] a, b;
    
   double[][] matrixCopy( double[][] a)
   { 
       double[][] b = a;
      return b;
   }
}
 
S

Spacerat

Gast
Mom... das ging anders...
Java:
double[][] rc = new double[in.length][];
for(int n = 0; n < rc.length; n++) {
  rc[n] = in[n].clone();
}
[EDIT]\/\/@TO: In der Realität ist maxemann96's Methode noch viel schlimmer... es ist ja nich mal 'ne Kopie, sondern ein und die selbe Instanz deiner Matrix.[/EDIT]
 
Zuletzt bearbeitet von einem Moderator:

tolgatus

Mitglied
@maxemann:Auf die weise erstelle ich doch aber nur eine genauso große Matrix, es soll ja aber eine Matrix samt Zelleninhalt komplett kopiert werden.

@diggaa: Du meinst also, das der Code an sich nicht ok ist? Dachte eigentlich der wäre in Ordnung, wollte nur hinter die Bedeutung von [a[0].length] statt beide male [a.length] und in der Schleife j < a.length statt einfach j< a.length steigen.
 

diggaa1984

Top Contributor
probier es aus :)

Java:
public class MainClass {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int[][] a = { { 1, 2 }, { 4, 5, 6 } };
		int[][] r = matrixCopy(a);
	}
	
	public static int[][] matrixCopy(int[][] a) {
		int[][] b = new int[a.length][a[0].length];
		
		for (int i = 0; i < a.length; i = i + 1)
			for (int j = 0; j < a[i].length; j = j + 1)
				b[i][j] = a[i][j];
		
		return b;
	}
}
 

diggaa1984

Top Contributor
@maxemann:Auf die weise erstelle ich doch aber nur eine genauso große Matrix, es soll ja aber eine Matrix samt Zelleninhalt komplett kopiert werden.

@diggaa: Du meinst also, das der Code an sich nicht ok ist? Dachte eigentlich der wäre in Ordnung, wollte nur hinter die Bedeutung von [a[0].length] statt beide male [a.length] und in der Schleife j < a.length statt einfach j< a.length steigen.


Also wenn die Matrix immer quadratisch ist, kannst du immer a.length verwenden, da Länge von Spalten und Zeilen der Matrix identisch sind.
Willst du aber eine Methode für beliebige 2-dimensionale Matrizen schreiben, so kann es passieren, dass du unterschiedlich Längen hast .. je nachdem wie du durch die Matrix läufst beziehst du dich dann auf die jeweilige Spalte oder Zeile (a.length) um das zu handhaben.
 

AquaBall

Top Contributor
@maxemann:Auf die weise erstelle ich doch aber nur eine genauso große Matrix, es soll ja aber eine Matrix samt Zelleninhalt komplett kopiert werden.

@diggaa: Du meinst also, das der Code an sich nicht ok ist? Dachte eigentlich der wäre in Ordnung, wollte nur hinter die Bedeutung von [a[0].length] statt beide male [a.length] und in der Schleife j < a.length statt einfach j< a.length steigen.


Also maxemann'sche Lösung ist Blödsinn, (sorry), weil wirklich nichts kopiert wird. sondern nur ein 2. Verweis auf die selben Daten erstellt wird.

Der Code an sich ist schon richtig, wenn man davon ausgehen kann, dass die Matrix strikt rechtwinkelig (wenn auch nicht quadratisch) ist.
Es müssen also alle a[] EXAKT gleich viele Elemente (sozusagen Spalten) haben.
Wie lang a[] selbst ist ist davon unabhängig (sozusagen Zeilen).
Aber wenn du das schon sicherstellen kannst, dass mutet es auch seltsam an, dass du dein for j von a abhängig machst.

Wenn, dann solltest du davor 1x die Länge festlegen:
Im Prinzip machst du ja bei der Instanziierung von b das selbe, wenn auch sehr versteckt,
was ja genau deine Frage trifft:
Code:
die Bedeutung von [a[0].lenth]
Code:
beide male [a.length]
würde quadratisch bedeuten.
und
Code:
in der Schleife j < a[i].length
ist nicht begründbar.
Code:
j< a.length
würde aber schiefgehen.

Java:
int zeilenAnzahl=a.length;
int spaltenAnzahl=a[0].length;   // sofern STRIKT rechtwinkeleig, also alle gleich lang sind
   for ( int zeile = 0; zeile< zeilenAnzahl; zeile++)
       for ( int spalte = 0; spalte< spaltenAnzahl; spalte++ )
           b[zeile][spalte] = a[zeile][spalte];

Aber abgesehen davon, ist die Lösung von Spacerat sicher die eleganteste und sicherste.
 
Zuletzt bearbeitet:

maxemann96

Mitglied
Das war einer meiner genialsten Einfälle!

Spaß beiseite ihr habt natürlich recht, da war wieder einem meiner lichten Momente

[WR]
Mein erstes Posting nicht beachten, nur Murks ;)
[/WR]

Da programmiert man schon 2-3 Jahre und baut dann son Mist, schon deprimierend ;(
 
Zuletzt bearbeitet:

mla.rue

Bekanntes Mitglied
@tolgatus
dein Algorithmus ist soweit richtig, dein Verständniss auch (nochmal gesagt: mit a.length greift man auf die "erste Dimension" zu, mit a[].length auf die zweite, mit a[][] würde man auf die dritte zugreifen etc).

Problemchen sehe ich in:
- du initialisierst a nicht, wie willst es dann einer Methode als Parameter übergeben und ein Ergebnis erwarten? Der Compiler meckert da
- i = i+1 solltest du als i++ schreiben (gleiches gilt für j)
- es gibt arrayCopy, auf dass man sich sowas sparen kann, mein Compiler meckert da jedenfalls wegen "manual array copy" bei solchem Code
 

tolgatus

Mitglied
@tolgatus
dein Algorithmus ist soweit richtig, dein Verständniss auch (nochmal gesagt: mit a.length greift man auf die "erste Dimension" zu, mit a[].length auf die zweite, mit a[][] würde man auf die dritte zugreifen etc).

Problemchen sehe ich in:
- du initialisierst a nicht, wie willst es dann einer Methode als Parameter übergeben und ein Ergebnis erwarten? Der Compiler meckert da
- i = i+1 solltest du als i++ schreiben (gleiches gilt für j)
- es gibt arrayCopy, auf dass man sich sowas sparen kann, mein Compiler meckert da jedenfalls wegen "manual array copy" bei solchem Code

War ja nich der ganze Code, Aufgabe war es halt, so eine Methode selbst zu schreiben, und dann ne 100x100 Matrix mit den Elementen Aij = i-j+2 zu übergeben.

Das mache ich hier:

Java:
public static void main(String[] arg)
   {   
       
       MatrixKopierer mat = new MatrixKopierer();
       double[][] neu = new double[100][100];
       for(int i=0; i < neu.length; i++)
           for(int j=0; j < neu.length; j++)
           {neu[i][j] = i - j +2;}
       double[][] ausg = mat.matrixCopy(neu);
       for(int i=0; i<ausg.length; i++)
       {System.out.println(ausg[i][i]);}
       
   }

Bekomme da keinen Compiler Fehler, jedoch kommt mir die Aufgabe schwachsinnig vor, da ja immer der Wert 2 reingeschrieben wird. j++ ist doch exakt dasselbe wie j = j + 1 oder nicht? ???:L
 

AquaBall

Top Contributor
... den Elementen Aij = i-j+2 zu übergeben.
Das mache ich hier:
Java:
{neu[i][j] = i - j +2;}
Mir kommt die Aufgabe schwachsinnig vor, da ja immer der Wert 2 reingeschrieben wird.

Wie kommst du auf die Idee??
Offensichtlich gibt die
Code:
for (i ...) for (j...) { ...}
-Konstruktion manchen Leuten das Gefühl, es wäre immer
Code:
i = j
.
Das ist natürlich NICHT so!!
Wenn i = 1, dann läuft j von 1 bis ...,
danach i = 2 , j von 1 bis ...,
dann i=3 ...
Somit ergibt
Java:
i - j + 2
sehr wohl sinnvolle Werte. (So ne Art 'Diagonal-Muster').
(Nur an der Hauptachse hast du alles '2'.)


j++ ist doch exakt dasselbe wie j = j + 1 oder nicht?
Hast du recht, aber
  • eleganter
  • und schneller (Wenn der Compiler nicht ideal optimiert)
  • und Java-mäßiger (lol).

Übrigens: plötzlich ist deine Matrix nicht nur überall gleichlang, sondern sogar doch quadratisch?!???:L
 
Zuletzt bearbeitet:

Fant

Bekanntes Mitglied
j++ ist doch exakt dasselbe wie j = j + 1 oder nicht? ???:L

Es liefert dir den gleichen Wert, aber nicht auf die gleiche Weise. ++ ist ein unärer Operator wohingegen das + dort ein binärer Operator ist. Die erste Variante ist wohl theoretisch etwas schneller. Spürbare Effekte wird das in solchen kleinen Konsolenanwendungen wohl niemals haben :>

Gruß Fant
 
Also bei der Matrix die du zum Testen verwendest müsste dein Code vom Anfang doch eigentlich funktionieren, da sie überall gleich lang ist. Würde sie das nicht sein, würde das hier helfen:
Java:
public class MatrixKopierer {
    
   double[][] matrixCopy( double[][] a)
   { 
   double[][] b = new double[a.length][0];//einfach mal initialisieren
   for ( int i = 0; i< a.length; i= i+1 ){
       b [i] = new double[a[i].length];
       for ( int j = 0; j< a[i].length; j= j+1 )
           b[i][j] = a[i][j];
   }
   return b;
   }
}

Glaub ich zumindest.
 
Zuletzt bearbeitet:

tolgatus

Mitglied
Wie kommst du auf die Idee??
Offensichtlich gibt die
Code:
for (i ...) for (j...) { ...}
-Konstruktion manchen Leuten das Gefühl, es wäre immer
Code:
i = j
.
Das ist natürlich NICHT so!!
Wenn i = 1, dann läuft j von 1 bis ...,
danach i = 2 , j von 1 bis ...,
dann i=3 ...
Somit ergibt
Java:
i - j + 2
sehr wohl sinnvolle Werte. (So ne Art 'Diagonal-Muster').
(Nur an der Hauptachse hast du alles '2'.)

Danke, werd mir das nochmal genau anschauen :)

Übrigens: plötzlich ist deine Matrix nicht nur überall gleichlang, sondern sogar doch quadratisch?!???:L

Ja, die zum Testen gegebene Matrix ist halt quadratisch, aber die Methode sollte auch nichtquadratische Matrizen kopieren können.

Bedanke mich bei allen, Thema wäre dann erledigt ;-)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Methode soll etwas ausrechnen und zurückgeben (klappt nd) hat wer eine Idee? Java Basics - Anfänger-Themen 11
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
L Methoden Eine Methode um zu testen ob es ein Nachbar gibt Java Basics - Anfänger-Themen 10
_user_q Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
berserkerdq2 Wozu benötigt man den BiPredicate, kann ich nicht einfach eine normale Methode nutzen, statt BiPredicate? Java Basics - Anfänger-Themen 3
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
berserkerdq2 Ich gebe eine ArrayList als List zurück per MEthode, wie kann ich nun aber die ArrayList speichern? Java Basics - Anfänger-Themen 46
M Eine Methode die erkennt ob die ein gegebene zahl größer oder kleiner sein muss Java Basics - Anfänger-Themen 2
H Eine Methode über Actionlistener beenden Java Basics - Anfänger-Themen 8
M Wie kann eine Methode für ein vorhandenes "Array von char" einen Index-Wert zurückliefern? Java Basics - Anfänger-Themen 3
M Wie kann eine Methode (string) eine andere Methode (void) mit zufälligen int-Werten aufrufen? Java Basics - Anfänger-Themen 4
M Wie verknüpfe ich eine Bedingung mit einer Methode ohne if-Verzweigung & Bedingungsoperator? Java Basics - Anfänger-Themen 2
M Wie kann eine Methode eine andere Methode um Werte wie z.B. 1 erhöhen? Java Basics - Anfänger-Themen 6
M Wie kann ich eine Methode aus einem Interface in eine Klasse implementieren, so dass sie ihre Funktion ausführt? Java Basics - Anfänger-Themen 7
B eine methode erstellen Java Basics - Anfänger-Themen 7
B Eine Methode erstellen Java Basics - Anfänger-Themen 3
bensdt Klasse erweitern um eine Methode "void decrement()" Java Basics - Anfänger-Themen 5
A Kann man eine Methode als Variable speichern und danach noch verändern? Java Basics - Anfänger-Themen 6
M Wie lang eine Funktion/Methode? Java Basics - Anfänger-Themen 51
scratchy1 Kann man in einer Methode eine andere aufrufen? Java Basics - Anfänger-Themen 2
scratchy1 Wie deklariert man eine Methode, die ein Objekt zurückgeben soll? Java Basics - Anfänger-Themen 22
J Methoden Suche effiziente Implementierung für eine Methode Java Basics - Anfänger-Themen 3
S Wie erstelle ich eine Vorbedingung für eine Variable einer Methode ? Java Basics - Anfänger-Themen 5
J Ein Objekt and eine Methode übergeben zwei Schreibweisen? Java Basics - Anfänger-Themen 6
R Eine Schleife durch eine Methode schließen? Java Basics - Anfänger-Themen 4
B Wie kann ich eine Methode einer selbst erstellten Klasse statisch importieren? Java Basics - Anfänger-Themen 5
S Methoden Beim Start meines Projektes eine Methode ausführen Java Basics - Anfänger-Themen 14
M Methoden Int einer Methode an eine andere Methode übergeben Java Basics - Anfänger-Themen 4
H Innerhalb einer Methode eine Variable der aufrufenden Methode ändern? Java Basics - Anfänger-Themen 2
TomatenBrot447 Mit toString eine Ausgabe liefern wie in einer schon implementierten Methode ? Java Basics - Anfänger-Themen 13
TomatenBrot447 Mit toString eine Ausgabe liefern wie in einer schon implementierten Methode ? Java Basics - Anfänger-Themen 1
B Hilfe bei eine Java-Methode Java Basics - Anfänger-Themen 4
G Wie rufe ich eine Methode außerhalb eines Projektes auf? Java Basics - Anfänger-Themen 18
P Variablen Wie kann ich eine lokale Variable in eine andere Methode einfügen? Java Basics - Anfänger-Themen 27
G Gibt es eine Methode die bei einem StringBuilder n mal das Zeichen c hinzufügt? Java Basics - Anfänger-Themen 6
V Vererbung (wie) kann man eine 'super'-Methode auf ein Objekt anwenden ? Java Basics - Anfänger-Themen 6
TheMenox Methoden Bestimmung an welche Methode eine andere Methode ihren Wert weitergeben soll Java Basics - Anfänger-Themen 35
M Best Practice Wann eine Methode schreiben ? Java Basics - Anfänger-Themen 14
G return-wert für eine Methode Java Basics - Anfänger-Themen 1
C Rekursion überführen in eine normale methode Java Basics - Anfänger-Themen 1
H Ist Math.Random() eine Methode oder ein Methodenaufruf (Klausurfrage) Java Basics - Anfänger-Themen 4
F Um 14:00 eine Methode aufrufen Java Basics - Anfänger-Themen 5
T unterklasse will eine methode von der oberklasse nutzen Java Basics - Anfänger-Themen 4
F Problem bei eshop -> Ausführen einer Methode über eine Shopverwaltung Java Basics - Anfänger-Themen 6
O Timeout für eine Methode festlegen Java Basics - Anfänger-Themen 3
llabusch Operatoren Methode um eine Zahl zu quadrieren Java Basics - Anfänger-Themen 1
D Methoden für was eine set zur get - Methode ?? Java Basics - Anfänger-Themen 3
F Teil eines Byte Array an eine Methode übergeben Java Basics - Anfänger-Themen 5
G Erste Schritte Timer: In einem festgelegten Intervall eine Methode ausführen Java Basics - Anfänger-Themen 6
S Methoden Rückgabewert einer Methode als Parameter an eine andere Methode übergeben, geht das? Java Basics - Anfänger-Themen 5
S Methoden void-Methode: Wieso gibt es eine Rückgabe? Java Basics - Anfänger-Themen 5
M Wert von globalen Variablen über eine Methode ändern Java Basics - Anfänger-Themen 8
T Probleme eine Methode zu schreiben Java Basics - Anfänger-Themen 20
J Methode um eine HTML-Datei zu öffnen Java Basics - Anfänger-Themen 10
B auf private Variable durch eine Methode zugreifen Java Basics - Anfänger-Themen 8
P Methoden Erklärung wie ich eine spezielle Methode richtig anwende Java Basics - Anfänger-Themen 9
R eine Methode automatisch wiederholen Java Basics - Anfänger-Themen 12
V Mit JS eine JAVA Methode aufrufen Java Basics - Anfänger-Themen 5
O Überprüfen ob eine Methode ausgeführt wurde Java Basics - Anfänger-Themen 10
L Methoden Eine Methode aus einer anderen Klasse aufrufen Java Basics - Anfänger-Themen 4
W Methoden Wie wird eine Methode hier aufgerufen? Java Basics - Anfänger-Themen 5
E Methoden Wie kann ich eine Methode so schreiben, dass Methodenaufruf polymorph erfolgen kann? Java Basics - Anfänger-Themen 8
D Von einer Methode auf eine lokale Variable in der Main zugreifen? Java Basics - Anfänger-Themen 15
F Klassen DataBuffer - Methode um Array in eine Bank zu schreiben Java Basics - Anfänger-Themen 3
W Eine Methode schreiben, ob eine Matrix eine Diagonalmatrix ist.? Java Basics - Anfänger-Themen 3
H Eine Methode mehrere Werte zurückgeben lassen Java Basics - Anfänger-Themen 7
L Datentypen eine Methode mit zwei möglichen Rückgabewerten Java Basics - Anfänger-Themen 20
E Variable aus einer Methode heraus in eine andere Klasse übergeben Java Basics - Anfänger-Themen 13
maddin86 Eine Methode für ein- und zweidimensionale double Felder als Parameter? Java Basics - Anfänger-Themen 5
H Reflexion: Eine Methode, beliebig viele Parameter (Java 1.4.2) Java Basics - Anfänger-Themen 8
1 OOP Zugriff auf eine Methode nur einmal die Sekunde Java Basics - Anfänger-Themen 8
E Methode gesucht die eine Abfolge von Ereignissen festsetzt. Java Basics - Anfänger-Themen 3
M Zwei Threads greifen auf eine Methode einer Klasse zu. Komplikationen? Java Basics - Anfänger-Themen 18
B Eine Methode für alle Subklassen aufrufen? Java Basics - Anfänger-Themen 8
A Einer Methode eine andere Methode übergeben Java Basics - Anfänger-Themen 6
Darth Simple Übergabe eines Strings an eine Methode Java Basics - Anfänger-Themen 3
L Aus einer Methode eine eigene Klasse machen - modular coden Java Basics - Anfänger-Themen 14
O Beim Schließen JDialog, im Frame-Owner eine Methode starten Java Basics - Anfänger-Themen 6
G Wie greife ich auf eine Methode zu? Java Basics - Anfänger-Themen 8
G Was passiert mit eine Methode bei einer Instanz Java Basics - Anfänger-Themen 13
G primitive Datentypen als Referenz an eine Methode übergeben Java Basics - Anfänger-Themen 2
N Wann muss eine Methode - protected sein wann public wann. Java Basics - Anfänger-Themen 5
K Eine Neue Methode Schreiben . Java Basics - Anfänger-Themen 15
StudentXYZ Auf Objekte zugreifen, die eine andere Methode initialisiert Java Basics - Anfänger-Themen 2
M Wert von einer Methode in eine Andere übergeben Java Basics - Anfänger-Themen 6
B Wie eine Methode aufrufen? Java Basics - Anfänger-Themen 2
G JComboBox um eine Methode erweitern Java Basics - Anfänger-Themen 2
E eine 'showDialog'-Methode erstellen Java Basics - Anfänger-Themen 9
B Wie aus instanzierter Klasse eine Methode der Main-Klasse Java Basics - Anfänger-Themen 9
M Methode einer Klasse in eine andere Übergeben Java Basics - Anfänger-Themen 4
T gibt es eine methode die einem alle Strings zurückliefert? Java Basics - Anfänger-Themen 7
G eine methode die zählt Java Basics - Anfänger-Themen 3
H strings in eine andere methode übergeben? Java Basics - Anfänger-Themen 6
W Eine Methode, mehrfacher gleichzeitger Ablauf möglich? Java Basics - Anfänger-Themen 2
A Wert einer Variable an eine Methode in einer anderen Klasse. Java Basics - Anfänger-Themen 4
M Brauche ein Beispiel für eine set() get() Methode Java Basics - Anfänger-Themen 4
M Konstruktor eine statische Methode? Java Basics - Anfänger-Themen 9
G Eine Methode zum Warten? Java Basics - Anfänger-Themen 7
G Auf eine Methode zugreifen Java Basics - Anfänger-Themen 2
B in einer Methode eine andere Methode aufrufen Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben