Matrix, Vektor

O2016

Bekanntes Mitglied
Vermutlich eine einfache Frage. Aber ich benötige einmal das Verständnis und komm einfach nicht dahinter.

Ich habe bsp ein Array long[][] a = new a[3][3];

Das Array soll so aussehen: (Die Zahlen seien mal beliebig)
1 2 3
2 2 4
3 3 5

Zusätzlich habe ich ein zweites eindimensionales Array(nennen wir ihn Vektor)
1 4 5

Jetzt will ich ein neues Array machen damit folgende Zahlen dastehen:
1 2 3 1
2 2 4 4
3 3 5 5

Das heisst ich will die Angaben des ersten Arrays mit dem zweiten Verknüpfen. Aber ich komm einfach nicht dahinter. Habe es mit Schleifen versucht usw...

Mein Ansatz:
long matr[][] = new long[a.length+1][a[0].length]; //<---a[0].lengthMach ich das eig so richtig

for(int j=0;j<a[0].length;j++)
{
for(int i=0;i<a.length;i++)
{
matr[j]= a[j];
// Irgendwie muss hier ja auch noch der zweite Vektor rein. nur wie? Ideen?
}

}
Vielen Dank!
 
Code das nächste mal bitte in [code=Java]Your Code[/code].

Der Algorithmus mal in Worten erklärt .. angenommen es gibt eine Matrix [n x m] und einen Vektor der Dimension [n]
Code:
- neue Matrix erstellen mit der Dimension [n, (m+1) ]
- für jede Reihe i der alten Matrix
    - für jede Spalte j der alten Matrix
        - kopiere Wert an Stelle [ i, j ] aus alter Matrix in neue Matrix
    - kopiere Wert aus dem Vektor an Stelle [ i ] in die Matrix an Stelle [ i, länge neue matrix - 1 ]
 
Du bist ein Brain! Danke! So langsam baut sich was in meinem Kopf auf 😀 ich verstehe es. Ich habe davor immer für mich im Kopf 0 und 1 für die Position eingesetzt. Aber wenn man sich den Code wirklich mal logisch vorstellt.

1A erklärt!
 
Vielen Dank für die Hilfe. Aber an einem weiteren Problem hänge ich nun:
Ich hab nun die neue große Matrix und möchte die größte Reihe ganz nach oben schieben also:
(die größte Reihe ist die mit der ersten größten Zahl (hier am Anfang mit der 1, die 2 oder die 3)

1 2 3 4
2 4 2 4
3 3 5 5

soll zu
3 3 5 5
2 4 2 4
1 2 3 4

Ich habe bereits ein tempArray angelegt welches die größte Reihe dort drinnen speichert. Aber ich weiß nicht wie ich die nun wechseln soll.
Da der Compiler ja nicht weiß in welche Reihe er das Array danach wieder schieben soll? Also war Reihe 2 oder Reihe 3 die Größte? Wie mache ich das?
Ich benötige vermutlich eine Hilfsvariable. Könntest du mir nochmal so einen schönen Ausschnitt zusenden wie davor 🙂

Vielen Dank
 
Ich probiers mal 😉

Code:
- Hilfsvariable "maxIndex" für Zeilenindex mit maximaler Zahl erstellen (initial = 0)

- für jede Zeile i der Matrix (ausgenommen Index 0)
    - Falls erstes Element der i-ten Zeile > erstes Element der maxIndex-Zeile
        - maxIndex = i;

- Falls maxIndex != 0
    - erste Zeile der Matrix in temporärem Array speichern
    - maxIndex-Zeile an erste Stelle verschieben
    - temporäres Array an Zeile maxIndex verschieben
 
@O2016 das nicht, aber es ist eine Alternative. Wenn ich
Java:
long[] tmp = new long[m];
System.arraycopy(matr[maxIndex], 0, tmp, 0, m);
matr[maxIndex] = matr[0];
matr[0] = tmp;
mit
Java:
long[] tmp = new long[m];
System.arraycopy(matr[matrIndex], 0, tmp, 0, m);
System.arraycopy(matr[0], 0, matr[matrIndex], 0, m);
System.arraycopy(tmp, 0, matr[0], 0, m);
und
Java:
for (int i = 0; i < m; i++) {
    long tmp = matr[maxIndex][i];
    matr[maxIndex][i] = matr[0][i];
    matr[0][i] = tmp;
}
vergleiche, empfinde ich die letzte Variante wesentlich angenehmer zu lesen (und GC-freundlicher ist sie auch 😛), auch wenn sie die langsamste sein könnte.
 
Wobei ich jetzt auch am ehesten die 4. Variante im Kopf hatte ;D

Java:
long[] tmp = matr[maxIndex];
matr[maxIndex] = matr[0];
matr[0] = tmp;
 

Zurück
Oben