220 likes | 399 Views
Programozás I. 3. gyakorlat. Primitív típusok. Primitív típusok jellemzői. Stack-en jönnek létre Mindig érték szerint tárolódnak minden más (objektumok) referencia szerint Csak előjeles típusok vannak pl.: nincs unsigned int, csak int Speciális osztályok:
E N D
Programozás I. 3. gyakorlat
Primitív típusok Antal Gábor
Primitív típusok jellemzői • Stack-en jönnek létre • Mindig érték szerint tárolódnak • minden más (objektumok) referencia szerint • Csak előjeles típusok vannak • pl.: nincs unsigned int, csak int • Speciális osztályok: • BigInteger - Akármekkora egész tárolására • BigDecimal - Akármekkora szám tárolására Példaprogram: PrimitivTipusok.java (pub) Antal Gábor
Csomagoló/Wrapper osztályok • A primitív típusokat „becsomagolhatjuk” objektumokká, erre szolgálnak a wrapper osztályok • Primitív típusokat objektumokként tudjuk kezelni • stack helyett a heapen lesznek tárolva • Implicit konverzió a wrapper osztály és a primitív típus között • Minden primitív típusnak van csomagoló osztálya • pl.: • int a; primitív típus, stacken • Integer a = new Integer(4); objektum, heapen http://en.wikipedia.org/wiki/Primitive_wrapper_class Antal Gábor
Csomagoló/Wrapper osztályok Integer a =new Integer(5); Integer b =new Integer(3); • a = b; • az „a” ugyanoda mutat, mint a „b” • a = b.clone(); • a „b” értéke „a”-ba másolódik • Ha az a és b primitív típusú: int a = 5; int b = 3; • a=b • értékadás, a értéke b lesz Antal Gábor
Operátorok • Értékadás • primitív típusoknál értékmásolás • objektumoknál referenciamásolás • tényleges másolás a clone() metódussal • Unáris aritmetikai • Előjelváltás (+ , -) Növelés/Csökkentés (++, --) • Bináris aritmetikai • Összeadás (+), kivonás (-), szorzás (*), osztás (/), maradékképzés (%) Antal Gábor
Operátorok • Bitműveletek: • Bitenkénti És (&), Bitenkénti Vagy (|), Kizáró Vagy (^), Komplementer képzés (~) • &=, |=, ^= • Háromoperandusú if-else ( ?: ) • feltetel ? ertek_ha_igaz : ertek_ha_hamis • Értékadás, összevont értékadás (balhoz a jobb oldalit) =, +=, -=, *=, /= Antal Gábor
Operátorok • Logikai • És (&&), Vagy (||), Negálás (!), • Csak boolean értékekre használhatóak! • Összetett kifejezések addig értékelődnek ki, amíg egyértelműen ki nem derül a kifejezés értéke: lusta kiértékelés • pl.: if( arg1==0 || arg2 == 1 || arg3 == 0 ) • Relációk: !=, ==, >=, <=, <, > • logikai értékkel térnek vissza • primitív típusoknál érték szerint hasonlít objektumoknál referencia összehasonlítás ( objektum összehasonlításra a .equals() metódus használatos )
Operátorok • Bitléptető operátorok • Előjeltartó (>>,<<), Előjelléptető (>>>) • balra (<<) : 2 n-edik hatványával szorozzuk a számot • jobbra ( >>) : 2 n-edik hatványával osztjuk a számot • Vessző csak for ciklusban használható (,) • Típuskonverzió: (type) value • primitívek között korlátozás nélkül engedélyezett • objektumok között csak az öröklődési fán belül • pl.: double c; • c = 5/2; (c értéke 2.0 lesz) • c = ((double)5/2); (c értéke 2.5 lesz) • Nincs sizeof() operátor Antal Gábor
Inkrementálás/dekrementálás int a = 5; • b = ++a; (prefix operátor) • a növelése, majd értékadás (b értéke 6) • c = a++; (postfix operátor) • c értéke 5 lesz, majd az értékadás után növelődik a • Ugyanez a helyzet a „--a”, és „a--" -nál is Példaprogram: Operatorok.java (pub) Antal Gábor
Parancssori argumentumok • minden parancssorból indított Java alkalmazásnak átadhatunk argumentumokat is • ezeket a main függvény args nevezetű String tömbjében érjük el • public static void main(String[] args) • a tömbindexelés 0-tól kezdődik • a 0. indexen lévő argumentum nem a program neve! • De ez könnyen kideríthető • a paraméterek darabszáma: args.length, egy egész értéket (int) ad vissza Antal Gábor
Parancssori argumentumok int argumentum; if (args.length != 0) { try { argumentum = Integer.parseInt(args[0]); } catch (NumberFormatException e) { System.err.println("Can’t parse to int"); System.exit(1); } } Antal Gábor
Parancssori argumentumok • Integer.parseInt(args[0]); • az args tömb első elemét számmá alakítjuk • az args tömb egy String tömb, nekünk viszont int-re van szükségünk, ezért át kell alakítani (Ez csak akkor működik, ha tényleg számokat adunk át paraméternek) • általános alak: <Típus>.parse*(”string”); • <Típus> lehet: Integer, Double, Float, stb.. • Integer.parseInt(“5”); • Double.parseDouble(“6.15”); • Viszont: String.valueOf(<bármi>); Antal Gábor
Minden C-beli vezérlési szerkezetet támogat a Java Kivéve a goto-t a kulccszó létezik, de nincs implementálva soha ne használjuk! if, for, while, switch Vezérlési szerkezetek Antal Gábor
Vezérlési szerkezetek • If-else if - else, valamint switch
Vezérlési szerkezetek • While, Do-While, For
Feladatok • Írd ki a parancssori paramétereket a konzolra • Írd ki a parancssori paramétereket a konzolra, fordított sorrendben • Írd ki a parancssori paramétereket úgy, hogy az első sorba csak az elsőt, a másodikba az első kettőt szóközzel elválasztva, a harmadikba az első hármat, stb.. • Írd ki a parancssori paraméterek közül a legnagyobbat, legkisebbet, valamint az értékek átlagát.
Szorgalmi feladat • Számítsd ki a parancssoron kapott két időpont (óra perc óra perc) között eltelt időt, és írasd ki a konzolra (óra perc formában) • A program elkészítése során ügyelj az adatok helyességére • bemenő paraméterek száma • az órák 0-23 intervallumba kell, hogy essenek • a percek 0-59 intervallumba kell, hogy essenek • Beadás: CooSpace, 2014.03.05 20:00-ig • Beadásnál csak egy darab Java fájlt kell feltölteni, Main.java néven Antal Gábor
Egynél több érték tárolására vannak kitalálva, de az elemek száma rögzített. Adott számú, azonos típust tartalmazó adattípus Az indexelés 0-val kezdődik Tömböket dinamikusan, a new operátorral lehet létrehozni, mérete a length adatmezővel lekérdezhető A Java teljes körű indexhatár-ellenőrzést végez, kivétellel jelzi, ha alul- vagy túlindexelés történik Tömbök Antal Gábor
Egydimenziós tömbök • Az egyetlen kiterjedéssel rendelkező tömböket szokás vektornak is nevezni • Definíció: • típus tömbnév[ ]; • típus[ ] tömbnév; • A tömböt futás során a new operátorral hozzuk létre • new típus[ méret ]; • a méret egy nemnegatív egész szám, értéke nem lehet nagyobb, mint az Integer.MAX_VALUE • pl.: int[ ] x = new int[5]; • elemei: x[0], x[1], x[2], x[3], x[4]
Egydimenziós tömbök • A Java lehetővé teszi, hogy a tömböket a definiálás során konstans értékekkel töltsük fel. Ilyenkor a tömböt a fordító hozza létre • típus[ ] tömbnév = { konstans1, konstans2 } • int[ ] arr = { 1, 2, 3, 4, 5 };
Többdimenziós tömbök • Tömbhivatkozás definíciója: • típus[ ] [ ] ... [ ] tömbnév; • típus tömbnév[ ][ ] ... [ ]; • 2D-s tömb létrehozása: • new típus[ méret1 ][ méret2 ] • Inicializálás konstans értékekkel: • int[ ] matrix = { { 1, 2 }, { 3, 4 } }; • Dinamikusan: • int[ ] matrix = new int[ 2 ][ 2 ];