Gyakorlati alapok
Hogyan cseréljünk meg kezeinkben 2 teli poharat? (adatcserebere)
Ha nem böktem volna oda a címben a adatcserebere szót, bizony elhüledezve lapozna ide a látogató, hogy mi köze lehet ennek az eszement című fejezetnek a programozáshoz...
Nos, nagyon sok, de előtte nézzük meg a címben szereplő kérdés drámai problematikáját!
Kizárva a zsonglőrködés lehetőségét -amit persze teli poharakkal a legmerészebb varázslók sem tudnak megtenni-, A és B pohár cseréjét csakis 3 lépésben tudjuk véghezvinni:
-
bal kezünkkel letesszük A poharat az asztalra,
-
áttesszük B poharat a bal kezünkbe,
-
jobb kezünkkel felvesszük az asztalról A poharat.
Láthatjuk tehát, hogy csere közben átmeneti tárolóként az asztalt használtuk fel.
De mi köze ennek a programozáshoz?
Adott például egy olyan számbekérés, amely során várunk alsó és felső határértéket. Mit teszünk abban az esetben, ha az (enyhén fogalmazva) nem okos felhasználó fordítva írja be a határértékeket?
A bekért adatot mégsem dobhatjuk el, elvégre alapjában véve helyesek, csak fordítva lettek megadva. Algoritmikusan pontosan a fent leírt módon kell eljárnunk:
-
A változót ki kell írnunk egy ideiglenes tárolóba,
-
B változót átírjuk A helyére,
-
az ideiglenes tárolóból kinyerjük A változót.
Nézzünk erre egy konkrét példát!
public class Main {
public static void main(String[] args) {
String poharA = "Coca-Cola";
String poharB = "Pepsi-Cola";
System.out.println("Pohár A: " + poharA);
System.out.println("Pohár B: " + poharB);
String tarolo = poharA;
poharA = poharB;
poharB = tarolo;
System.out.println("Pohár A: " + poharA);
System.out.println("Pohár B: " + poharB);
}
}
Végeredmény:
Pohár A: Coca-Cola
Pohár B: Pepsi-Cola
Pohár A: Pepsi-Cola
Pohár B: Coca-Cola
A 2 szám közötti egészek egyszerű adatbekéréssel című fejezetben pontosan ilyen jellegű probléma merül és természetesen a megoldás is lényegileg ugyanaz.
Ugyanakkor itt jegyezzük meg, hogy a fent ismertetett technikát nevezik swap-nek is.