870 likes | 1.02k Views
11. Alapfogalmak 12. Kifejezések, értékadás 13. Szelekciók 14. Iterációk 15. Metódusok írása. IV. Java programozási alapok. 11. Alapfogalmak 1. Mintaprogram - Krumpli 2. ASCII és unikód karakterek 3. A program alkotóelemei 4. Változó, típus 5. Primitív típusok.
E N D
11. Alapfogalmak 12. Kifejezések, értékadás 13. Szelekciók 14. Iterációk 15. Metódusok írása IV. Java programozási alapok
11. Alapfogalmak 1. Mintaprogram - Krumpli 2. ASCII és unikód karakterek 3. A program alkotóelemei 4. Változó, típus 5. Primitív típusok IV. Java programozási alapok 6. A forrásprogram szerkezete 7. Metódushívás (üzenet) 8. Értékadó utasítás 9. Adatok bevitele a konzolról 10. Megjelenítés a konzolon
Mintaprogram - Krumpli • Feladat – Krumpli • Egy cserkésztáborban készül a vacsora, de a konyhafőnök nem tudja, mennyi krumplit vegyen. A fejadagot ismeri, az 0.4 kg, de a szükséges mennyiséget számítógép segítségével szeretné kiszámolni az aktuális létszámtól függően. • Írjuk meg a programot a konyhafőnöknek! A program kérje be a létszámot, majd írja ki a szükséges mennyiséget a következőképpen: • Létszám? 20 • A szükséges mennyiség: 20 * 0.4 kg = 8.0 kg
Krumpli + main(args:String[]) A Krumpli osztály UML ábrája
import extra.*; // extra egy saját csomag, nem API public class Krumpli { public static void main(String[ ] args) { int letszam; double fejadag=0.4, osszesen; // A letszam változó beolvasása konzolról: letszam = Console.readInt("Letszam? "); // A szükséges mennyiség kiszámítása és kiírása: osszesen = fejadag*letszam; System.out.print("A szukseges mennyiseg: "); System.out.println(letszam+" * "+fejadag+" kg = "+ osszesen+" kg"); } }
ASCII és unikód karakterek • ASCII karakterkészlet: Szabványos kódrendszer, mely a karaktereket 1 bájton ábrázolja. • megjeleníthető karakterek • vezérlő (kontroll, escape) karakterek • Unikód karakterkészlet: Szabványos kódrendszer, mely a karaktereket 2 bájton ábrázolja. • jelölése: \uhhhh, ahol h hexadecimális számjegy • lehetséges értékek: \u0000 \uffff • első 256 karaktere megegyezik az ASCII karakterkészlettel
A program alkotóelemei • Fehér szóköz, pl. szóköz, tabulátor, sorvégjel • Megjegyzés: //, /*...*/ • Azonosító • Kulcsszó • Literál • egész, valós, karakter, logikai, szöveg • Szeparátor, pl.:( ) { } . , [ ] • Operátor, pl. */+ == < A program alapelemei
fejadag osszesen letszam ? 0.4 ? 4 byte 8 byte 8 byte Változó, típus Változó = névvel azonosított memóriaterület int letszam; double fejadag=0.4, osszesen;
Deklarálás, inicializálás • A Javában a változókat deklarálni kell! Deklarálás: <típus> <változó>; Például: int letszam; Deklarálás és inicializálás: <típus> <változó> = <kifejezés> ; Például: double fejadag=0.4; A deklaráció abban a blokkban érvényes, ahol a változót deklaráltuk. Inicializálás
Konstans • Változtathatatlan változó • Módosítója: final • Például:final int EVSZAM=1999; • EVSZAM=2000;// fordítási hiba! • konstans literál
Java típusok • Primitív típusú változó: memóriaterülete oszthatatlan. • Referencia típusú változó: mutató, mely egy objektum hivatkozását tartalmazza.
Primitív Numerikus Logikai Valós boolean Sorszámozott Egész Karakter float double byte short int long char Primitív típusok
Egész típusok Valós típusok
Karakter típus Logikai típus
C1 CN App v1, ...vN … ... ... +main +m1 ... +mN A forrásprogram szerkezete
Csomagok importálása // App.java forrásprogramja import java.util.*; import extra.*; // osztálydeklarációk(sorrend mindegy): class C1 { ... } ... class CN { ... } osztály feje osztály blokkja
osztály feje metódus feje public class App { v1, ... vN public static void main(String[ ] args) { // metódus blokkja: deklarációk,utasítások } void m1() { ... } ... void mN() { ... } } App a fordítási egység egyetlen publikus osztálya
Blokk, utasítás • Blokk (összetett utasítás): { ... } • Mindaz, amit abban a blokkban adunk meg, pontosan arra a blokkra érvényes! • Ahol egy utasítást megadhatunk, ott egy blokkot is. • Egy blokk utasításokból áll. • Minden utasítást pontosvessző zár le.
Utasítások fajtái • Deklaráló utasítás (Memóriahelyek foglalása):int letszam; • Értékadó utasítás: letszam=45; • Postfix és prefix növelő és csökkentő utasítások:letszam++; --letszam; • Metódushívás: System.out.println("Hello"); • Példányosítás (Új objektum létrehozása):aDatum = new Datum(2000,11,05); • Programvezérlő utasítás: if (i==0) ... • Üres utasítás: ;(csak egy pontosvessző)
Kivétel (Exception) // Kivetel.java import extra.*; public class Kivetel { public static void main(String[] args) { int narancsokSzama = 56; int letszam = Console.readInt("Letszam: "); System.out.println("Fejadag: "+narancsokSzama/letszam); System.out.println("Finom a narancs!"); } }
Metódushívás (üzenet) • Osztálymetódus hívása: Osztály.metódus(paraméterek)Például:letszam = Console.readInt("..."); • Példánymetódus hívása: objektum.metódus(paraméterek)Például: System.out.print("..."); • Ha a metódust a saját osztályából hívjuk, akkor nem kell minősíteni:metódus(paraméterek)
extra::Console +readInt(str: String): int +readInt(): int +readLong(str: String): long +readLong(): long +readDouble(str: String): double +readDouble(): double +readChar(str: String): char +readChar(): char +readLine(str: String): String +readLine(): String +pressEnter() Adatok bevitele a konzolról
Megjelenítés a konzolon • Konzolra a következő metódusokkal írhatunk: • System.out.print(paraméter) • System.out.println(paraméter) • System.out.println() • számok, szövegek igazítása: extra.Format osztály
extra::Format +left(num: int, len: int): String +right(num: int, len: int): String +left(num: double, len: int, frac: int ): String +right(num: double, len: int, frac: int ): String +left(str: String, len: int): String +right(str: String, len: int): String
12. Kifejezések, értékadás 1. A kifejezés alkotóelemei 2. Operátorok 3. Típuskonverziók 4. Értékadás 5. Kifejezések kiértékelése – példák 6. Feltétel 7. Paraméterátadás, túlterhelt metódusok 8. java.lang.Math osztály IV. Java programozási alapok
Kifejezések kiértékelése Kiértékelési sorrend: • Zárójelek (belülről kifelé) • Előbb a nagyobb prioritású operátor • Egyforma prioritás esetén az operátor asszociativitásától függően jobbról balra () vagy balról jobbra ()
Példák • alfa • Math.sin(alfa) + 5 • -98E4 • (j<5) || (j>10) • !(Math.sqrt((n+3)/2)==0)
Az operandus típusa • Változó és függvény típusa a deklarált típus • Literálok alapértelmezett típusai: • Egész: int. De: 45L • Valós: double. De: 7.8F • Logikai: boolean • Karakter: char • Szöveg: String
Példák int i; long lon; float f; double d; char c; boolean bool; Unáris postfix és prefix operátorok (előjel, léptetés) i=3; i=-i; // i==-3 i=3; lon=3+ i++; //lon==6, i==4 i=3; lon=3+ ++i; //lon==7, i==4 Multiplikatív operátorok i=22; i=i/5; // i==4f=20.5F; f=f/5; // f==4.1f=20.5F%5; // f==0.5
Hasonlító és egyenlőségvizsgáló operátorok i=3; bool=i==5; // bool==false Additív operátorok i=3; f=i+600; // f==603.0 Logikai operátorok boolean vanA; vanA=Console.readChar(”Betű:")=='A' || Console.readChar("Még egy:")=='A'; Feltételes kiértékelés int teljesitmeny = 60;int premium = (teljesitmeny>50)?10000:0;
Típuskonverziók • A Java erősen típusos nyelv (a fordító ellenőrzi a kompatibilitást) • Bizonyos műveletek előtt konvertálni kell.A típuskonverzió fajtái (kétféle osztályzás): • automatikus (implicit) vagy kényszerített (explicit) • konverzió iránya: szűkítő vagy bővítő
Implicit és explicit típuskonverzió Típuskényszerítés (<típus>) <kifejezés> Példák: double d; int i=5; d=i; //int double, implicit bővítő d=79.4; i=(int)d; // double int, explicit szűkítő, i==79 // i=d; // Szintaktikai hiba!!!
Szűkítő és bővítő konverziók • bővítő konverzió: nincs információvesztés • szűkítő konverzió: információvesztés lehetséges byte short long float double int char A bővítő konverzió iránya Példák: int i = 'A'; // implicit bővítő, char int char c = (char)65; // explicit szűkítő, int char
Numerikus operátorok típuskonverziói • Minden operandus minimum int típusú lesz • Az eredmény típusa a közös, konvertált típus lesz Példák: double d = 21/2*3; // d==30.0 double d = 21.0/2*3; // d==31.5 int i = ’A’+1; // i==66
Értékadás <változó> = <kifejezés> • precedenciája a legkisebb • visszaadja a jobb oldali kifejezés értékét Többszörös értékadás <v1> = <v2> = ... <vN> = <kifejezés> (jobb asszociativitás)
Értékadási kompatibilitás Az értékadás kiértékelésének szabályai: • Bal és jobb oldal típusai megegyeznek nincs típuskonverzió byte b=(byte)128; // b==-128 • Jobb oldal szűkebb implicit bővítő konverzió int i=50; long lon; lon = i; // int long • Bal oldal byte, short vagy char, és belefér implicit szűkítő konverzió byte b=127; // int byte char c=65; // int char
1 1 2 2 3 3 Kifejezések kiértékelése - példák • int i=5; double d=1; • i / 2 * d d * i / 2 2 (int) eredmény: 2.5(double) eredmény: 2.0(double) 5 (int) 5.0(double) 1.0(double)
1 6 2 3 4 5 7 Kifejezések kiértékelése - példák • byte b=1; int i=3; • (b + 2 * i++) % 2 == 0 | i == 3 3 (int) false(boolean) false(boolean) 6 (int) 7 (int) 1 (int) eredmény: false(boolean)
Metódusok túlterhelése • int min(int a, int b)long min(long a, long b)float min(float a, float b)double min(double a, double b) • metódus szignatúrája: • azonosítja a metódust • metódus neve + a paraméterek száma + paraméterek típusa (például min,int,int) • túlterhelt (overloaded) metódus: ugyanolyan nevű, de más paraméterezésű metódus
Adatok (konstansok) • final double E a természetes alap final double PI Pi értéke java.lang.Math osztály • matematikai függvények és konstansok gyűjteménye • nem példányosítható, kizárólag statikus deklarációkat tartalmaz
Metódusok double max(double a, double b)float max(float a, float b)int max(int a, int b)long max(long a, long b) double min(double a, double b) float min(float a, float b)int min(int a, int b)long min(long a, long b) double abs(double a)float abs(float a)int abs(int a)long abs(long a)
Metódusok (folyt.) double ceil(double a) // legközelebbi >= egész double floor(double a) // legközelebbi <= egész double rint(double a) // legközelebbi egész long round(double a) // legközelebbi long értékint round(float a) // legközelebbi int érték double exp(double a) // eadouble log(double a) // e alapú logaritmusdouble sqrt(double a) // négyzetgyök adouble pow(double a, double b) // ab double random() // véletlenszám, // 0.0 <= … <1.0.
Metódusok (folyt.) double sin(double a) // a radián!double cos(double a)double tan(double a) double toDegrees(double radian) // radián fokdouble toRadians(double degree) // fok radián
13. Szelekciók 1. Egyágú szelekció – if 2. Kétágú szelekció – if..else 3. Egymásba ágyazott szelekciók 4. Többágú szelekciók – else if és switch 5. Független feltételek vizsgálata IV. Java programozási alapok
[else] [feltétel] utasítás Egyágú szelekció - if if (feltétel) utasítás; if (feltétel) { utasítás1; utasítás2; ... utasításN; } A Javában minden feltételt zárójelbe kell tenni!