A programozás során sokszor az a feladat, hogy valamilyen eredményt, vagy épp változók tartalmát írjuk ki a képernyőre. A kiíratás egyszerű kommunikáció a program és a felhasználó között. Ennek használata egyszerű, de vannak fontos szabályok, melyeket be kell tartani.
System.out.println() és System.out.print()
Kezdetben ezt a két metódust fogjuk kiíratásra használni, az alapvető igényeinket teljesen ki fogják szolgálni. A Java nyelvben a szövegeket idézőjelek “” közé tesszük. Nem macskaköröm, ahogy többször is hallottam. Na még egyszer: idézőjel.
Amit ilyen jelek közé írunk, azt a rendszer szövegnek tekinti. A kiíratás során a két metódusnak ilyen szövegeket szoktunk megadni, de ezekhez sokszor hozzá is fűzünk valamit. Lássunk akkor erre példákat:
int szam1 = 10; int szam2 = 20; int osszeg; osszeg = szam1 + szam2; System.out.println( "A szamok osszege: " ); System.out.println( osszeg );
A két kiemelt sorban láthatod azt, hogy a println() metódusnak odaadhatsz egy szöveget is, valamint egy változót is. A változót a kiíratás során átalakítja szöveggé, így a megjelenítés nem lesz gond. A két sort azonban össze is vonhatod:
System.out.println( "A szamok osszege: " + osszeg );
Ebben az esetben az történik, hogy az összeg változó tartalmát, ami egy egész szám, hozzáfűzi a szöveghez úgy, hogy közben át is alakítja azt is szöveg típusúvá.
Abban az esetben, amikor a + jel valamelyik oldalán szöveg található, akkor a + jel nem az összeadás, hanem az összefűzés műveletét jelenti!
Fontos, hogy az átalakítás csak a kiíratásra korlátozódik, az összeg változó továbbra is azt az egész számot tartalmazza, amivel továbbra is végezhetsz számításokat.
Az összefűzés tekintetében teljesen mindegy, hogy mi az összefűzés sorrendje, maximum a kiíratásnak nem lesz értelme:
System.out.println( osszeg + " a szamok osszege." );
Egy fontos problémára felhívnám a figyelmet, ami sokszor gondot jelent. Tömörítsük még a programunkat, ne számítsuk ki külön változóba az összeget, hanem magába a kiíratásba tegyük bele:
int szam1 = 10; int szam2 = 20; System.out.println( "A szamok osszege: " + szam1+szam2 );
A kiemelt sorban van egy nagyon fontos probléma, de egy picit félreteszem, és azonnal visszatérünk.
Nézzük meg a következő programot: adott egy egész szám, írjuk ki a kétszeresét.
int szam = 7; System.out.println( "A szam ketszerese: " + szam * 2 ); // 14
Ez a megoldás teljesen helyes, és semmi gond nincs vele. Most írjuk ki a számot úgy, hogy hozzáadunk kettőt:
int szam = 7; System.out.println( "A szam kettovel megnovelve: " + szam + 2 ); // 72???
Mi a gond? Azonos rangú műveletek esetén mi a műveleti sorrend? Balról jobbra haladunk. Vagyis:
- kiírjuk a szöveget: “A szam kettovel megnovelve: “
- hozzáfűzzük ehhez a szam-ot. “A szam kettovel megnovelve: 7”
- hozzáfűzzük ehhez a 2-őt: “A szam kettovel megnovelve: 72”
Vagyis mivel a műveletek egyenrangúak, balról-jobbra haladva hatja végre. A szöveghez hozzáfűzi a a változót, majd az egészhez a 2-őt. Ezek alapján már értheted az átugrott feladatnál is mi a gond.
Mit tehetünk? Bíráljuk felül a műveleti sorrendet egy egyszerű zárójelezéssel.
int szam = 7; System.out.println( "A szam kettovel megnovelve: " + (szam + 2) ); // 9
A szorzás esetén miért nem volt gond? Azért, mert először a szorzást végezte el, majd annak az eredményét fűzte hozzá a szöveghez.
A kiíratás során a szövegben használhatunk olyan speciális vezérlő karaktereket, melyek valamilyen plusz funkciót adnak hozzá a kiíratáshoz. Ezekből keveset használunk ténylegesen, de azért felsorolom azokat is, amelyek használhatók, csak gyakorlati haszna már nincs. Fontos, hogy ezeket a vezérlő karaktereket minden esetben \ jellel (backslash) vezetjük be, ami a mögötte elhelyezkedő karakternek más jelentést ad.
- \n – sordobás (új sort kezd ennél a pontnál
- \t – tabulátor (alapérték által meghatározott mezőnyit ugrik)
- \b – backspace (balra egy karakter visszatörlés)
- \r – visszaáll a kurzor a sor elejére, bármit írunk ezután, a sorban lévő szöveget törli
- \a – néhány terminálon esetleg megszólaltatja a gép speaker-jét
- \\ – maga a \ karakter
- \” – idézőjel
Lássunk erre ömlesztett példákat, minden különösebb magyarázat nélkül:
System.out.println( "foo\bbar" ); System.out.println( "foo\rbar" ); System.out.println( "foo\nbar" ); System.out.println( "Gyakran hasznalt vezerlo karakterek:\n\\n \\\\ \\\"" ); System.out.println("Elso szam:\t" + 10); System.out.println("Masodik szam:\t" + 20); System.out.println("Harmadik szam:\t" + 30);
A println() és print() metódusok között annyi a különbség, hogy a println() úgy írja ki az adott szöveget, hogy utána új sort kezd. A print() pedig a kurzort a sor végén hagyja, vagyis a kiírt szövegek egymás mellé kerülnek. A példában azonban ha ismét kiírunk valamit, akkor az közvetlenül a Zsolt után folytatódik.
System.out.print("Kiss "); System.out.print("Zsolt");
A kiíratásba akár komplexebb dolgok is belekerülhetnek, erre most csak egy példát írnék, a későbbi tananyagokban úgyis lesz több példa is ezekre, melyeket ez alapján meg fogsz érteni. Adott két szám, írd ki a kisebb szám kétszeresét:
int a = 15; int b = 20; System.out.println("A kisebb kétszerese: " + Math.min(a,b) * 2);
Pingback: Java programozás 3. – Változók |
Amikor azt akarjuk kiíratni: 7+2, akkor miért a “szám kétszerese” a kiírandó szöveg? Számomra úgy értelmes, hogy “a számnál kettővel több”.
Ezt elírtam, javítottam 🙂
Amikor 10+20 összegét akarjuk kiíratni és tömörítésképpen összevonjuk a sorokat, akkor a helyes kiíratás ez lesz?: System.out.println( “A szamok osszege: “+(szam1+szam2));
így ezt írja ki: A szamok osszege: 30
Az á és ö betűk használhatók?
A helytelen kiíratásnál, ami a fenti szövegben szerepel ez lesz a kiírás?:
A szamok osszege1020
System.out.println( “A szam kettovel megnovelve: “+szam+2 ); // 72???
Alatta:
kiírjuk a szöveget: “A szam ketszerese: “
hozzáfűzzük ehhez a szam-ot. “A szam ketszerese: 7”
hozzáfűzzük ehhez a 2-őt: “A szam ketszerese: 72”
Így helyes:
kiírjuk a szöveget: “A szam kettovel megnovelve: ”
hozzáfűzzük ehhez a szam-ot. “A szam kettovel megnovelve: 7”
hozzáfűzzük ehhez a 2-őt: “A szam kettovel megnovelve: 72”
Úgy látom már korábban is jelezték. Javítottam, köszönöm 🙂