ich studiere Info im ersten Semester und komme bisher auch sehr gut mit, da ich mich vorher schon recht gut mit Java ausgekannt hab. Wir bekommen also wöchentlich Übungszettel, und auf diesem steht eine Frage, zu der mir nicht so viel einfällt:
Wie kann man die Inhalte zweier Variablen tauschen, ohne eine dritte Variable zu Hilfe zu nehmen? Nennen sie Bedingungen und Ablauf sowie mindestens zwei Möglichkeiten.
Also eine hätte ich:
Tausch int <-> int (oder ähnliches, also char und bei flot etc. müsste das mit Einschränkungen auch gehen).
Code:
int a = 7; //müssten so circa in der Hälfte des Wertebereichs für ints liegen, a und b
int b = 8;
a += b; // a = 15
b -= a; // b = -7
a += b; // a = 8
b *= -1; // b = 7
Das würde funktionieren. Hat jemand noch Anregungen oder andere Ideen, die er mir auch erklären kann? Es muss nicht auf sowas wie Effizienz geachtet werden, sondern es geht erstmal nur um die Idee an sich.
Zwei Probleme:
1. wir kennen offiziell noch keine Strings, also ist diese Möglichkeit nicht in der "Lösungsmenge" ;-)
2. Du brauchst doch wohl irgendwie eine Variable die sich den String merkt, sonst kriegst du das net gebacken .
Aber trotzdem Danke für deine Antwort!
Ich glaube nicht, dass deine zuverlässig Lösung geht.
Denn wenn z.B. a=5 und b=7, dann wird durch 'a=Math.max(a,b)' der Variablen a der Wert '7' zugewiesen. Das Ergebnis von 'b=Math.min(a,b);' ist dann auch gleich '7', weil hier aus '7' und '7' das Minimum ermittelt werden soll.
Auch das dürfte nicht gehen :
- a ist kleiner als b
- das Min. aus a und b ist somit a (dies wird b zugewiesen)
- dann wird a und b verglichen (beide haben den Min.-Wert angenommen)
- der Max-Wert aus 'b=Math.min(a,b),a' ist immer gleich a für a < b
Den Fall a == b (wird auch über das if geregelt) habe ich nicht betrachtet, da es da nix zum Tauschen gibt.
public class Test{
public static void main(String args[]) {
int a = 8;
int b = 0;
int tmp = 0;
if((a | b) != a && (a & b) != a){
tmp = (a | b) ^ b;
a = (b | a) ^ a;
b = tmp;
}
else if((a & b) != a){
tmp = (a | b);
b = tmp;
a = (b | a) ^ a;
}
else{
tmp = (a & b);
a = (a | b);
b = tmp;
}
System.out.println(a);
System.out.println(b);
}
}
EDIT: Hab nun doch eine dritte Variable genommen.
Ich bin mir aber ziemlich sicher, dass es eine gute Methode mit nur 2 Variablen mit solchen Verknüpfungen gibt.
:toll: Vielen Dank für Eure Hilfe bis hierhin!!! :toll:
damits übersichtlich bleibt, fasse ich noch einmal zusammen:
Getauscht werden sollen primitive Datentypen, keine Objekte. Also auch keine Strings. Methoden aus Math dürfen benutzt werden, sonst keine. Bisher sind 3 Möglichkeiten gefunden worden:
1.
Code:
int a = 7;
int b = 8;
a += b; // a = 15
b -= a; // b = -7
a += b; // a = 8
b *= -1; // b = 7
2. (dotlens)
Code:
int a = 6;
int b = 8;
a = a * b; // a = 48
b = a / b; // b = 6
a = a / b; // a = 8