Swapping mit einer dritten Variablen in Java [geschlossen]

8

Was ist die Notwendigkeit, eine dritte Variable zu verwenden, um Zahlen zu tauschen? Es tut mir leid, aber ich verstehe es nicht.

Hier ist der Beispielcode, den ich habe, um Elemente eines Arrays basierend auf der Länge jedes Elements zu sortieren. Wie Sie hier sehen können, verwende ich eine dritte Variable und vertausche die Elemente des Arrays. Ich habe eine andere Implementierung für dieses Programm, das funktioniert, aber ich fand das folgende Beispiel online und würde gerne verstehen, wofür das Tauschen nützlich ist? Wenn mir jemand das erklären könnte, wäre das großartig.

%Vor%     
david 07.10.2013, 05:51
quelle

12 Antworten

23

Die kurze Antwort ist, dass Sie in Java nicht jonglieren können!

Stellen Sie sich jede Variable als eine Hand vor, die einen Wert "halten" kann; z.B. ein Ball.

Wenn du zwei Hände und zwei Bälle hast, besteht die einzige Möglichkeit, die Bälle in die entgegengesetzten Hände zu bringen, darin, einen der Bälle in die Luft zu werfen (oder so ähnlich). Aber in Java gibt es keine Operation "Wert in die Luft werfen".

Wenn du nicht jonglieren kannst, brauchst du eine dritte Hand (oder einen anderen temporären Halteplatz), um die Bälle zu tauschen. Und in Java bedeutet das eine temporäre Variable.

Für die Aufzeichnung fand ich diese Analogie sehr nützlich, als ich programmieren lernte. Aber nimm es nicht zu weit: -).

(In der Tat, wenn wir über Ganzzahlen sprechen, gibt es einen mathematischen Trick, mit dem Sie Zahlen austauschen können ... mit XOR ... aber es funktioniert im Allgemeinen nicht.)

    
Stephen C 07.10.2013, 06:31
quelle
6
%Vor%

Das ist der Teil des Tauschens. Ohne eine temporäre temporäre Variable würden Sie unterwegs Informationen verlieren.

Beispiel: int a = 5, b = 10;

Tausche jetzt a und b ohne temp: a = b; - & gt; a = 10, b = 10 - & gt; 5 ist verloren keine Möglichkeit, es zu bekommen oder zu bekommen. Oder lass es versuchen: b = a; - & gt; a = 5, b = 5 - & gt; 10 ist verloren, keine Möglichkeit, es wiederzuerlangen.

Mit Temp:

  • temp = a; - & gt; a = 5, b = 10, temp = 5.
  • a = b; - & gt; a = 10, b = 10, temp = 5.
  • b = temp; - & gt; a = 10, b = 5, temp = 5.
  • a und b sind jetzt getauscht.

Das ist es. Die temporäre Variable speichert den ursprünglichen Status einer Variablen, da dieser Status überschrieben und verloren geht, wenn der Variablen der neue Status (oder Wert) zugewiesen wird.

In Ihrem Beispiel verwenden Sie Swapping, um die Position einer Nummer (Information) mit einer Nummer einer anderen Position zu ändern. Hier haben Sie einen Sortieralgorithmus, der in die Kategorie Auswahlsortierung fällt (und nicht Bubble-Sortierung wie andere Antworten vorgeschlagen).

Sehen Sie sich das animierte Bild im Link "Bubble Sort" an und Sie erhalten eine Idee des Tauschens. Schauen Sie sich dann den Link "Auswahl sortieren" an, um zu verstehen, was hier vor sich geht.

In Ihrem Codebeispiel sucht der Algorithmus nach der ersten Position und vergleicht sie mit einer anderen Position im Array. Wenn es in der ersten Position einen kleineren Wert als den aktuellen Wert findet, tauscht es beide Nummern aus. Nach einer Iteration der äußeren Schleife (die innere Schleife wurde zum ersten Mal vollständig ausgeführt) enthält die erste Position in Ihrem Array den kleinsten Wert im gesamten Array, denn wenn es größer war, wurde es mit einem kleineren ausgetauscht, und wenn Sie alle getestet haben Werte darauf enthält es die kleinste.

Beim nächsten Durchlauf (i = 0 ++ = 1) in der Schleife wird der Rest des Arrays (i + 1 = 2) gegen die zweite Position (i = 1) getestet. Also nach dem zweiten Iterationsindex 1 (arr 1 ) enthält die zweitkleinste Zahl (und Index 0, arry [0] enthält) das kleinste). Dies geschieht so lange, bis alle Indizes des Arrays auf diese Weise verarbeitet wurden - tatsächlich kann der letzte nicht mit anderen verglichen werden, da es tatsächlich der letzte ist - und das Array wird als Ergebnis sortiert.

    
Martin Kersten 07.10.2013 05:59
quelle
4

Der Code, den Sie hier haben, ist bubble-sort . Es ist der Algorithmus, der verwendet wird, um die Werte eines Arrays / einer Liste zu sortieren. Dieser Algorithmus vergleicht jedes Paar benachbarter Variablen und tauscht sie bei falscher Reihenfolge aus. Es gibt ein kleines animiertes Bild in dem Artikel, das Ihnen hilft zu verstehen, was ein Tausch ist, werfen Sie einen Blick darauf In python zum Beispiel können Sie einen Tausch von zwei Variablen ohne Verwendung der temporären Variablen vornehmen, wie zum Beispiel:

%Vor%

Aber in Java und anderen Sprachen mit C-ähnlicher Syntax, die ich kenne (C, C ++, C #), wenn Sie zwei Variablen tauschen wollen, müssen Sie den Wert der ersten Variablen in einer temporären Variable speichern, den Wert von Sekunde zuweisen Variable auf die erste Variable und dann zuzuweisen in einem temporären Variablenwert (der tatsächlich Wert der ersten Variablen war) zu der zweiten Variablen. So funktioniert es.

    
aga 07.10.2013 05:59
quelle
2
%Vor% Du nimmst das einfach so auf     arr [i] = 5;     arr [j] = 6; wenn Sie versuchen, mit der Temp-Variable zu tauschen. Dann werden Sie die Daten wie verlieren     arr [i] = arr [j]; // arr [i] = 5 und arr [j] = 5     arr [j] = arr [i]; // beide haben vale 5. Ich denke, dass Sie die Idee der Temperaturvariable

verstehen     
quelle
1

Nehmen wir an, Sie haben versucht, zu tauschen, ohne eine dritte Variable zu verwenden.

%Vor%

Es gibt ein offensichtliches Problem hier. Weil Sie arr [j] arr [i] zugewiesen haben und umgekehrt, sind sie einander gleich. Die dritte Variable stellt sicher, dass Sie den Inhalt der überschriebenen Variablen vorübergehend speichern und dann der anderen Variablen zuweisen können.

    
Dom 07.10.2013 06:02
quelle
1

Lassen Sie a=1, b=2, c;

c=a ; bedeutet c=1 ;

Lassen Sie a leer. %Code%; bedeutet a=b ;

Lassen Sie a=2 leer. %Code%; bedeutet b ;

Sie können die Werte von b=c und b=1 vertauscht sehen.

    
Kanwaljit Singh 07.10.2013 06:05
quelle
1

Die dritte Variable hilft Ihnen beim Austauschen von zwei Werten, besonders bei Strings.

%Vor%

In Zahlenfällen können Sie den Code einige Male ohne dritte Variable finden. In solchen Fällen funktioniert es wie folgt:

%Vor%

Hier braucht keine dritte Variable.

    
CHowdappaM 07.10.2013 06:27
quelle
0

Dritte Variable ist, den Wert, den Sie tauschen möchten, vorübergehend zu speichern. Im Fall von Integer können Sie dies tun, ohne die dritte Variable durch eine mathematische Berechnung zu verwenden    a = a + b- (b = a);  Übrigens, der obige Code wird niemals das String-Array sortieren.

    
HEAT 07.10.2013 05:59
quelle
0

Das Austauschen ist nützlich, um die Reihenfolge des Arrays zu ändern. Manchmal möchten Sie vielleicht Ihr Array sortieren oder zufallsmäßig verteilen. In diesem Fall müssen Sie Elemente austauschen, um das gewünschte Ergebnis zu erhalten.

Die dritte Variable wird benötigt, weil Sie eine Variable vorübergehend speichern müssen. Wenn Sie arr[i] = arr[j] verwenden, überschreiben Sie den Inhalt von arr[i] mit dem Inhalt von arr[j] , so dass Sie diesen Wert verloren haben, wenn Sie ihn nicht gespeichert haben.

(Sie können Werte ohne Verwendung einer dritten Variablen austauschen, indem Sie einen sogenannten XOR-Austausch was ein bisschen Basteln beinhaltet.

    
Alowaniak 07.10.2013 05:59
quelle
0

Nun, in Java ist es nicht notwendig, eine dritte Variable zu verwenden, um zwei Variablen zu tauschen. Aber wenn Sie eine dritte Variable verwenden, ist es einfach.

ohne Verwendung einer dritten Variablen

%Vor%     
quelle
0

Aus dem gleichen Grund, wenn zwei Autos auf einer sehr engen Straße aufeinander zu fahren, muss einer von ihnen auf einen Parkplatz fahren, um den anderen passieren zu lassen. (Weil zwei Autos, oder zwei Werte, nicht den gleichen Platz auf einmal einnehmen können, ohne dass zumindest einer von ihnen zerstört wird).

Die Analogie ist nicht präzise. Es wäre präziser gewesen, wenn das erste Auto sich auf einen Parkplatz geklont hätte, dann das zweite Auto über das erste Auto gefahren wäre, es zerstört hätte, dann ist der Klon des ersten Autos abgehoben.

(Oder noch genauer:

  1. Das erste Auto klont sich in einen Parkplatz
  2. Das zweite Auto klont sich in das Original des ersten Autos und zerstört es
  3. Der Klon des ersten Autos klont sich an, wo das Original des zweiten Autos ist, es zerstörend .. und jetzt haben die zwei Autos Plätze getauscht.

Äh, vergessen Sie nicht, lassen Sie uns aus Gründen der Einfachheit auf Genauigkeit verzichten.)

    
Ruby 07.10.2013 06:52
quelle
-1

Es hängt von Ihnen ab ... Wie Sie es verwenden wollen. Wie zum Beispiel, Solving simultane Gleichung hat eine Reihe von Methoden zu lösen, so in der gleichen Weise gibt es eine Reihe von Logik implementiert werden und Sie können wählen, was auch immer du würdest gerne ...

Und was dieses eine Anliegen betrifft, so glaube ich, dass die Verwendung einer dritten Variablen hier die Komplexität beseitigen und die Lesbarkeit und das Verständnis verbessern wird.

    
Sharique 07.10.2013 05:59
quelle

Tags und Links