2 Arrays vertauschen, aber wie ?

Status
Nicht offen für weitere Antworten.

FinalbrainXP

Aktives Mitglied
Hi, ich stehe for einem großen Problem und hoffe es gibt da eine Lösung. Ich will einen 2D Rauchalgorithmus, welcher
recht komplex ist, nach Java portieren. Die Makros von C konnte ich bis jetzt ohne Probleme in Java-Funktionen umwandeln oder gegebenfalls ersetzen. Nun stehe ich vor dem Problem, dass es ein Makro gibt, welches 2 Pointer vertauscht. Aber wie kann ich das in Java umsetzen ?

Hier das C-Makro:

#define SWAP(x0,x) {float * tmp=x0;x0=x;x=tmp;}

meine Lösung dazu sieht bis jetzt so aus:

Code:
public void SWAP(float[] x0, float[] x)
{
        float temp;
         
         for (int i=0; i < x0.length; i++)
         {
            temp  =  x0[i];
            x0[i] = x[i];
            x[i]  = temp;
         }
}

Hier muss davon ausgegangen werden, dass die Arrays gleich groß sind.
Außerdem ist diese Lösung viiiel zu langsam, da Tausende Partikel berechnet werden müssen.
Gibt es da irgendwelche schnelleren Möglichkeiten oder Alternativen ? Ich kann auch die gesamte
Struktur umstricken, hauptsache ich bekomme dieses vertauschen hin :(
 

Eldar

Aktives Mitglied
Es ist ganz einfach... in Java sind alles Zeiger..
float[] x0 als Übergabeparameter gibt nur einen Zeiger x0 an der auf ein Array vom Typ float zeigt.
Machst du ein float x[] = x0; zeigt zusätzlich noch ein Zeiger x auf das gleiche Array wie x0. Die Größe wird automatisch angepasst.

Beispiel:
Code:
  int x[] = new int[2];
        int y[] = new int[3]; // Arraydefinitionen
        x[0]=5;
        x[1]=10;
        y[0]=2;
        y[1]=8; 
        y[2]=20;//array befüllen
        for(int i=0;i<x.length;i++)
            System.out.print(x[i]+", ");
        for(int i=0;i<y.length;i++)
            System.out.print(y[i]+", ");    //1. Ausgabe
        int z[] = x;  //hilfsarray;
        x=y;
        y=z; // Arrayzeiger "verbiegen"
        System.out.println();
        for(int i=0;i<x.length;i++)
            System.out.print(x[i]+", ");
        for(int i=0;i<y.length;i++)
            System.out.print(y[i]+", "); //2. Ausgabe

Ausgabe:
5, 10, 2, 8, 20,
2, 8, 20, 5, 10,
 
R

Roar

Gast
dein beispiel funktinoiert nur nich wenn man daraus ne methode machen will, denn
> float[] x0 als Übergabeparameter gibt nur einen Zeiger x0 an der auf ein Array vom Typ float zeigt.
is falsch, in java gibt es nur call by value
 

FinalbrainXP

Aktives Mitglied
@Eldar..nein so einfach ist das eben nicht, es werden glaube ich nur Kopien der Referenzen übergeben.
Wenn ich diese vertausche, beeinflusst das eben nicht die Original-Referenzen. Aber ich muss leider eine Methode benuzten :( Gibt es denn wenigstens was wie nen memcpy unter java oder so..hauptsache ich bekomme die schleife weg :( ??
 
B

Beni

Gast
"System.arrayCopy" kann einen ganzen Array, oder auch nur Teile davon, in einen anderen Kopieren.

Wenn du unbedingt eine Methode verwenden musst (wieso auch immer), dann pack doch deine Arrays in einen Wrapper, eine Klasse die nur einen Array beinhaltet. Dann kannst du die Arrays dieser beiden Wrapper austauschen.
Code:
public final class Wrapper{
  public int[] array;
}

public void swap( Wrapper a, Wrapper b ){
  int[] c = a.array;
  a.array = b.array;
  b.array = c;
}
 

Eldar

Aktives Mitglied
Achso, wenn er natürlich die Methode verlässt gibt es auch die entsprechenden Referenzen nicht mehr und alles ist wieder beim Alten.
 

Marco13

Top Contributor
@FinalbrainXP: Ich würde dir empfehlen, die Arrays direkt dort zu vertauschen, wo sie vertauscht werden müssen. (Und vor allem: NICHT ihre Inhalte mit for-Schleifen oder System.arracopy zu kopieren - das ist überflüssig!). Es gibt in diesem Fall keinen (driftigen) Grund, das mit einer Methode zu machen (was ohne weiteres ja nicht möglich ist). Die drei Zeilen werden dein Programm ja nicht unlesbar machen oder übermäßig aufblähen. :D

P.S: FALLS die beiden Arrays zufällig Klassenvariablen sind, kannst du für die zu vertauschenenden Array-Paar ja notfalls spezielle Methoden anbieten ...
Code:
private void swapSomeParticles() { float temp[] = this.x; this.x = this.y; this.y = temp; }
private void swapSomeOtherParticles() { float temp[] = this.a; this.a = this.b; this.b = temp; }
 

FinalbrainXP

Aktives Mitglied
@Marco..ja du hast vollkommen Recht. :) Ich wollte den C-Code schön übersichtlich portieren weil dieser leider sehr viele Makros enthält. Aber um ein Auflösen werde ich nicht drumm rum kommen. Habe mittlerweile den Algorithmus am laufen. Das C-Makro vertauscht ja auch nicht wirklich 2 Arrays, wie ich anfangs dachte. Es vertauscht ja auch nur KOPIEN von Pointern, wo die Vertauschung dann nur lokal gilt wo sie auftritt. Meine Sorge hier war demnach sowieso
unberechtigt, da es sich nicht um doppelpointer gehandelt hat :)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Vertauschen von arrays vom Typ String Allgemeine Java-Themen 2
Ü Arrays vergleichen Allgemeine Java-Themen 59
Ü Methoden Arrays vergleichen - Methode Allgemeine Java-Themen 1
Ü Eurobeträge in möglichst wenig Scheine/Münzen zerlegen (2D-Arrays) Allgemeine Java-Themen 27
Buroto Arrays generator Allgemeine Java-Themen 10
B Arrays von Methoden möglich? Allgemeine Java-Themen 44
rosima26 Bester Sortieralgorithmus für kurze Arrays Allgemeine Java-Themen 40
B Lottospiel, genug Reihen tippen für 3 Richtige (Spaß mit Arrays)? Allgemeine Java-Themen 46
Muatasem Hammud Erstellung von Testdaten für Arrays Allgemeine Java-Themen 6
Junger_Basileus Attribute, Arrays, Schleifen Allgemeine Java-Themen 9
P Generics und Arrays Allgemeine Java-Themen 6
O Arrays an DOCX-Stamper Library übergeben Allgemeine Java-Themen 1
L ArrayList mit String Arrays in ein Array umwandeln Allgemeine Java-Themen 1
R Zeilen eines 2d Arrays abwechselnd links und rechts mit Nullen auffüllen Allgemeine Java-Themen 14
R Spalten/Zeilen verschieben in zweidimensionalen Arrays? Allgemeine Java-Themen 3
kodela Inhalt eines Arrays ändert sich mysteriös Allgemeine Java-Themen 2
W Spaß mit Arrays Allgemeine Java-Themen 1
W Reflexion und Arrays Allgemeine Java-Themen 7
S Problem mit Arrays Allgemeine Java-Themen 1
D Erste Schritte Arrays vergleichen und die zahlen die nur einmal vorkommen ausgeben Allgemeine Java-Themen 5
J int Werte in einer anderen Klasse in Arrays speichern Allgemeine Java-Themen 3
Neoline Interpreter-Fehler Probleme mit Arrays.toString Allgemeine Java-Themen 7
H Zweidimensionale Arrays Allgemeine Java-Themen 6
Neoline Methoden Zwei Arrays abwechselnd zusammenführen Allgemeine Java-Themen 15
J Methoden clone(), arraycopy(): ein- und zweidimensionale Arrays Allgemeine Java-Themen 8
D Übereinstimmungen in Arrays Allgemeine Java-Themen 5
B Arrays mit Text und Zahlen füllen Allgemeine Java-Themen 3
B Spalten eines 2d-Arrays Allgemeine Java-Themen 2
J Arrays auf gleichheit untersuchen funktioniert nicht Allgemeine Java-Themen 11
N 2 Arrays abwechselnd verbinden Allgemeine Java-Themen 13
J private and arrays Allgemeine Java-Themen 2
T Alle Kombinationen aus zwei Arrays Allgemeine Java-Themen 8
RalleYTN Datentypen Herausfinden ob Object ein Array ist ohne den Typen des Arrays zu kennen? Allgemeine Java-Themen 12
R Rückgabe eines Arrays durch Funktion Allgemeine Java-Themen 9
H Datentypen Typ eines Arrays überprüfen Allgemeine Java-Themen 9
C Zweidimensionale Arrays - Quadratisch? Allgemeine Java-Themen 4
AssELAss Zwei Arrays / ArrayLists inhaltlich vergleichen Allgemeine Java-Themen 2
A Lineare Interpolation mit zwei Arrays Allgemeine Java-Themen 4
S Datentypen Warum ist bei Arrays die Länge als Property aufrufbar? Allgemeine Java-Themen 1
Dechasa Vergleichen von zwei Arrays Allgemeine Java-Themen 4
DanielsLPecke Java Arrays an andere Java Programme schicken und zurück Allgemeine Java-Themen 5
H Arrays Allgemeine Java-Themen 4
J NullPointerExeption bei Inizialisierung eines Arrays Allgemeine Java-Themen 3
D Größe der Zahlenkombinationen eines Arrays begrenzen Allgemeine Java-Themen 3
B automatisch benannte arrays erstellen Allgemeine Java-Themen 9
Y inhalte aus 2 unterschiedlichen Arrays miteinander vergleichen Allgemeine Java-Themen 12
M Arrays.sort Problem Allgemeine Java-Themen 2
F Arrays Allgemeine Java-Themen 2
F Arrays Allgemeine Java-Themen 4
N Werte aus Arrays auslesen funktioniert nicht Allgemeine Java-Themen 5
F mehrdimensionale Arrays Allgemeine Java-Themen 4
A Methoden Generische Methode mit Arrays - Source Compatibility 1.7 benötigt, wieso? Allgemeine Java-Themen 3
S Java Problem bei der Rückgabe eines Arrays Allgemeine Java-Themen 19
I Verschiedene Arrays auslesen Allgemeine Java-Themen 6
R Wie kann man diese Methoden in arrays etablieren? Allgemeine Java-Themen 8
C Best Practice [Arrays] Wie sinnvoll prüfen, ob Array primitive Datentypen enthält? Allgemeine Java-Themen 6
C Best Practice Tiefe Kopie eines Arrays unbekannter Dimension und unbekannten Typs Allgemeine Java-Themen 4
R kann man irgendwie mit Arrays mit Eingabefenstern und Schleifen Werte abklappern? Allgemeine Java-Themen 2
R Was los mit dieser Aufgabe? Arrays mit Schachbrettmustern? Allgemeine Java-Themen 10
M Eingabe von Arrays geht über gewünschte Anzahl hinaus Allgemeine Java-Themen 2
K Methoden Arrays auf true Werte prüfen Allgemeine Java-Themen 4
T String Arrays aus den Argumenten auslesen Allgemeine Java-Themen 3
E ArrayIndexOutOfBounds - mehrdimensionale Arrays Allgemeine Java-Themen 6
D Arrays überschreiben sich Allgemeine Java-Themen 2
C Klonen von Arrays/ Matrizenrechnung Allgemeine Java-Themen 2
K Mehrere Arrays auf einmal erstellen Allgemeine Java-Themen 2
P Arrays erzeugen Allgemeine Java-Themen 5
R ListIterator über mehrere Arrays Allgemeine Java-Themen 13
S Variablen Dynamische Arrays Allgemeine Java-Themen 2
O Variablen System.getenv: Sinnlose Werte, Arrays?! Allgemeine Java-Themen 6
C Arrays.asList() - Problem Allgemeine Java-Themen 3
M problem mit speicherbedarf von arrays Allgemeine Java-Themen 14
B Generics und primitve arrays Allgemeine Java-Themen 6
V Umbennen von Arrays Allgemeine Java-Themen 7
M Einfluss von Caching auf die Performance (große Arrays) Allgemeine Java-Themen 24
A Frage zu Arrays Allgemeine Java-Themen 6
S Werte aus 2 eindimensionale boolean arrays mithilfe von logischen operatoren berechnen Allgemeine Java-Themen 6
R Methoden Rückgabe Arrays aufangen Allgemeine Java-Themen 29
T Arrays erstellen Allgemeine Java-Themen 3
C Zwei Arrays vereinen Allgemeine Java-Themen 3
J Array Sortierung auf andere Arrays anwenden Allgemeine Java-Themen 6
BattleMaster246 Arrays funktionieren nicht Allgemeine Java-Themen 6
S "Arrays" mit String-Key? Allgemeine Java-Themen 3
L verkettete Listen oder Arrays + Indexlisten effizienter? Allgemeine Java-Themen 3
S Überprüfung/Parsen eines Byte-Arrays Allgemeine Java-Themen 9
Developer_X Aus Datei in Arrays laden-Problem Allgemeine Java-Themen 5
O Problem beim Ausgeben von Arrays Allgemeine Java-Themen 9
G Arrays.toString Allgemeine Java-Themen 4
S to string mit arrays Allgemeine Java-Themen 10
S Objekte mit Arrays Allgemeine Java-Themen 9
Meldanor Mehrdimensionale Arrays : Zugriff auf n-tes Array Allgemeine Java-Themen 5
K Arrays.asList und primitive Typen Allgemeine Java-Themen 2
P Beschreibung eines Arrays Allgemeine Java-Themen 3
S Rücklieferung eines String-Arrays über Methode? Allgemeine Java-Themen 3
lacco Speicherverbrauch von Arrays Allgemeine Java-Themen 2
J Mit mehrdimensionalen Integer-Arrays arbeiten Allgemeine Java-Themen 17
knuckles12 null pointer exception bei arrays Allgemeine Java-Themen 6
H2SO3- dynamisches anlegen der dimensionaltität eines arrays Allgemeine Java-Themen 6
G Arrays von Klassen initialisieren Allgemeine Java-Themen 13
D Felder (Arrays) Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben