Programozás I. 3. gyakorlat
Szegedi Tudományegyetem Természettudományi és Informatikai Kar
Antal Gábor
1
Primitív típusok Típus neve
Érték
Alap érték Foglalt tár Intervallum
byte
Előjeles egész
0
8 bit
-128 – 127
short
Előjeles egész
0
16 bit
-32768 – 32767
int
Előjeles egész
0
32 bit
-2147483648 - 2147483647
long
Előjeles egész
0
64 bit
-9223372036854775808 9223372036854775807
float
IEEE 754 lebegőpontos
0.0
32 bit
+/-1.4E-45 - +/-3.40E+38, +/-infinity, +/-0, NaN
double
IEEE 754 lebegőpontos
0.0
64 bit
+/-4.9E-324 +/-1.8E+308, +/-infinity, +/-0, NaN
char
Unicode
\u0000
16 bit
\u0000 - \uFFFF
boolean
true, false
false
1 bit (32 Szegedi Tudományegyetem Természettudományi és Informatikai Kar bitből)
true, false Antal Gábor
2
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) Szegedi Tudományegyetem Természettudományi és Informatikai Kar
Antal Gábor
3
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 Szegedi Tudományegyetem Természettudományi és Informatikai Kar
Antal Gábor
4
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 Szegedi Tudományegyetem Természettudományi és Informatikai Kar
Antal Gábor
5
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 (%)
Szegedi Tudományegyetem Természettudományi és Informatikai Kar
Antal Gábor
6
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) =, +=, -=, *=, /=
Szegedi Tudományegyetem Természettudományi és Informatikai Kar
Antal Gábor
7
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 )
Szegedi Tudományegyetem Természettudományi és Informatikai Kar
Antal Gábor
8
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 Szegedi Tudományegyetem Természettudományi és Informatikai Kar
Antal Gábor
9
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)
Szegedi Tudományegyetem Természettudományi és Informatikai Kar
Antal Gábor
10
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
Szegedi Tudományegyetem Természettudományi és Informatikai Kar
Antal Gábor
11
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); } }
Szegedi Tudományegyetem Természettudományi és Informatikai Kar
Antal Gábor
12
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:
.parse*(”string”); • lehet: Integer, Double, Float, stb.. – Integer.parseInt(“5”); – Double.parseDouble(“6.15”); – Viszont: String.valueOf(); Szegedi Tudományegyetem Természettudományi és Informatikai Kar
Antal Gábor
13
Vezérlési szerkezetek • 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
Szegedi Tudományegyetem Természettudományi és Informatikai Kar
Antal Gábor
14
Vezérlési szerkezetek • If-else if - else, valamint switch
Szegedi Tudományegyetem Természettudományi és Informatikai Kar
Antal Gábor
15
Vezérlési szerkezetek • While, Do-While, For
Szegedi Tudományegyetem Természettudományi és Informatikai Kar
Antal Gábor
16
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. Szegedi Tudományegyetem Természettudományi és Informatikai Kar
Antal Gábor
17
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
Szegedi Tudományegyetem Természettudományi és Informatikai Kar
Antal Gábor
18
Tömbök • 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 Szegedi Tudományegyetem Természettudományi és Informatikai Kar
Antal Gábor
19
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] Szegedi Tudományegyetem Természettudományi és Informatikai Kar
Antal Gábor
20
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 };
Szegedi Tudományegyetem Természettudományi és Informatikai Kar
Antal Gábor
21
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 ]; Szegedi Tudományegyetem Természettudományi és Informatikai Kar
Antal Gábor
22