OOP: Java 8.Gy: Gyakorlás 43/1 B ITv: MAN 2019.04.10
43/2
Egy régebbi beszámoló anyaga 1. Feladat: Készítsen egy Szemely nevű osztályt a szokásos konvenciók betartásával, amely tárolja egy ember nevét (szöveg) és korát (egész érték) Készítsen konstruktort, mely a név és a kor segítségével inicializál egy példányt Készítsen getter és setter metódusokat Készítsen egy Megfelelo nevű metódust, melynek működési módja egyelőre nem ismert. Definiálja felül az osztály tostring metódusát, mely a következő alakban adja vissza az adatokat: Név: Éva, Kor: 57 43/3
Szemely osztály public abstract class Szemely { private String nev; private int kor; public Szemely(String nev, int kor){ this.nev = nev; this.kor = kor; public abstract boolean Megfelelo(); public String tostring(){ return "Név: "+nev+", Kor: "+kor; 43/4
Szemely osztály public String getnev() { return nev; public void setnev(string nev) { this.nev = nev; public int getkor() { return kor; public void setkor(int kor) { this.kor = kor; 43/5
Egy régebbi beszámoló anyaga A 2. Feladat: Készítse el a Jelentkezo nevű osztályt, a Szemely osztály leszármazottjaként Az osztály tárolja a jelentkező intelligencia hányadosát (egész) és igényelt fizetését (egész) Legyen az osztálynak olyan konstruktora, mely a név és a kor segítségével inicializál egy példányt Készítse el az intelligencia hányados (iq), és a fizetés beállításához és kiolvasásához szükséges metódusokat Készítse el a Megfelelo metódust, mely: ha a személy nincs még 40 éves, és az iq-ja nagyobb 110-nél, és a fizetési igénye kevesebb 400.000-nél akkor igaz, egyébként hamis értékkel térjen vissza Definiálja felül a tostring metódust, mely a következő formában adja vissza egy jelentkező adatait (A Megfelelo tulajdonság Igen vagy Nem szöveggel legyen visszaadva!): Név: Éva, Kor: 57, Iq: 138, Fizetés: 360000, Megfelelő: Nem 43/6
Jelentkezo osztály public class Jelentkezo extends Szemely { private int iq; private int fizetes; public Jelentkezo(String nev, int kor){ super(nev, kor); public void setiq(int iq){ this.iq = iq; public void setfizetes(int fizetes){ this.fizetes = fizetes; public int getiq(){ return iq; 43/7
Jelentkezo osztály public int getfizetes(){ return fizetes; public boolean Megfelelo(){ if (super.getkor() > 40 && iq > 110 && fizetes < 400000) return true; else return false; public String tostring(){ String mf="nem"; if (Megfelelo()) mf="igen"; return super.tostring()+", Iq: "+iq+", Fizetés: "+ fizetes+", Megfelelő: "+mf; 43/8
Egy régebbi beszámoló anyaga 3. Feladat: Készítsen egy FelvetelProgram nevű futtatható osztályt Olvassa be billentyűzetről a jelentkezők számát, és készítsen egy ilyen elemszámú, Jelentkezo típusú tömböt Töltse fel a tömböt, a nevet billentyűzetről olvassa be, a kor 18 és 60 közötti véletlen szám legyen Állítsa be az iq-t véletlenszerűen generált adatokkal, melyek 80 és 140 között lehetnek Állítsa be az igényelt fizetést véletlenszerűen generált adatokkal, melyek 200000 és 500000 között lehetnek, 10000-es lépésközzel (200000, 210000, 220000, 230000, 500000) Írassa ki minden jelentkező adatait és minősítését a képernyőre Határozza meg, és írassa ki, hogy hány jelentkező megfelelő! 43/9
Egy régebbi beszámoló anyaga Futtatási minta: Jelentkezők száma: 5 A jelentkező neve: Éva A jelentkező neve: Dezső A jelentkező neve: Béla A jelentkező neve: Zoli A jelentkező neve: Judit Név: Éva, Kor: 57, Iq: 138, Fizetés: 360000, Megfelelő: Nem Név: Dezső, Kor: 34, Iq: 124, Fizetés: 240000, Megfelelő: Igen Név: Béla, Kor: 57, Iq: 130, Fizetés: 480000, Megfelelő: Nem Név: Zoli, Kor: 35, Iq: 124, Fizetés: 430000, Megfelelő: Nem Név: Judit, Kor: 37, Iq: 86, Fizetés: 400000, Megfelelő: Nem 1 jelentkező megfelelő. 43/10
FelvetelProgram osztály import java.util.scanner; public class FelvetelProgram { public static void main(string[ ] args) { Scanner sc = new Scanner(System.in); String s1; int db, kor, iq, fiz; System.out.println("Jelentkezők száma: "); s1 = sc.nextline(); db = Integer.parseInt(s1); Jelentkezo [] jel = new Jelentkezo[db]; 43/11
FelvetelProgram osztály for (int i=0; i<db; i++){ System.out.println("A jelentkező neve: "); s1 = sc.nextline(); kor = 18 + (int)(math.random()*43); jel[i] = new Jelentkezo(s1, kor); iq = 80 + (int)(math.random()*61); fiz = 200000 + 10000*(int)(Math.random()*31); jel[i].setiq(iq); jel[i].setfizetes(fiz); for (int i=0; i<db; i++) System.out.println(jel[i]); int mdb = 0; for (int i=0; i<db; i++) if (jel[i].megfelelo()) mdb++; System.out.println(mdb+" jelentkező megfelelő."); 43/12
Konzol Jelentkezők száma: 5 A jelentkező neve: a A jelentkező neve: b A jelentkező neve: c A jelentkező neve: d A jelentkező neve: e Név: a, Kor: 40, Iq: 94, Fizetés: 460000, Megfelelő: Nem Név: b, Kor: 28, Iq: 118, Fizetés: 290000, Megfelelő: Igen Név: c, Kor: 38, Iq: 110, Fizetés: 290000, Megfelelő: Nem Név: d, Kor: 48, Iq: 106, Fizetés: 430000, Megfelelő: Nem Név: e, Kor: 34, Iq: 87, Fizetés: 350000, Megfelelő: Nem 1 jelentkező megfelelő. 43/13
43/14
Gyakorló példa a számonkérésre 1. Feladat: Készítsen egy Szemely nevű osztályt a szokásos konvenciók betartásával, amely tárolja egy ember nevét (szöveg) és Neptun kódját (szöveg) Készítsen konstruktort, mely a név és a kód alapján inicializál egy példányt Legyen az osztálynak a nevet visszaadó metódusa Alkosson olyan törzs nélküli metódust, mellyel egész értékként kiszámítja a Juttatás-t. 43/15
Szemely osztály, adattagok: név, neptunkód Konstruktor (név, neptunkód). Metódusok: getnev, Juttatás public abstract class Szemely { private String Nev; private String Neptunkod; public Szemely (String Nev, String Kod){ this.nev = Nev; Neptunkod = Kod; public String getnev(){ return Nev; public abstract int Juttatas(); 43/16
Gyakorló példa a számonkérésre 2. Feladat: Készítse el a Hallgato nevű osztályt, a Szemely osztály leszármazottjaként Az osztály tárolja a Hallgató féléves jegyeit egy egész típusú tömbbe, és legyen egy Ösztöndíjat tároló adattagja is. Az osztályhoz tartozzon egy konstans, mely az ösztöndíj számítás ALAPértékét jelentse, értéke legyen 10000. Készítsen egy, a jegyek számát beállító metódust Készítsen egy metódust, egy konkrét (valahányadik) jegy beírására Alkosson metódust az ösztöndíj beállítására Készítsen egy Átlag metódust, mely a jegyek átlagát adja vissza A Juttatás metódus adja vissza egy hallgató juttatását, mely ha az átlag legalább hármas, akkor az átlag és az alap szorzata, egyébként nulla. Az osztály tostring metódusa a következő formában adjon vissza adatot: Név: Géza, Átlag: 3.1, Ösztöndíj: 31000 Készítsen egy jegykiír nevű metódust, mely kiírja egy hallgató nevét és összes jegyét a következő formában: Géza 0. jegye: 5 Géza 1. jegye: 5 Géza 2. jegye: 2 43/17 Géza 3. jegye: 3...
Hallgato osztály, szülő: Szemely, adattagok: jegyek[ ], Ösztöndíj Konstruktor (név, neptunkód). Metódusok: setjegyek, JegyBeír, setösztöndíj, Átlag, Juttatás, tostring, jegykiír public class Hallgato extends Szemely { private int [ ] jegyek; private int Osztondij; final static int ALAP = 10000; public Hallgato (String Nev, String Kod){ super(nev, Kod); public void setjegyek(int j){ jegyek = new int[j]; public void JegyBeir(int i, int jegy){ jegyek[i] = jegy; public void setosztondij(int od){ Osztondij = od; 43/18
Hallgato osztály, szülő: Szemely, adattagok: jegyek[ ], Ösztöndíj Konstruktor (név, neptunkód). Metódusok: setjegyek, JegyBeír, setösztöndíj, Átlag, Juttatás, tostring, jegykiír 43/19 public double Atlag(){ double atlag = 0d; for (int i=0; i<10; i++) atlag += jegyek[i]; return atlag/10d; public int Juttatas(){ if (Atlag() >= 3) return (int)(atlag()*alap); else return 0; public String tostring(){ return "Név: "+getnev()+", Átlag: "+Atlag()+ ", Ösztöndíj: "+Osztondij; public void jegykiir(){ for (int i=0; i<10; i++) System.out.println(getNev()+ " "+i+". jegye: "+jegyek[i]);
Gyakorló példa a számonkérésre 3. Feladat: Készítsen egy HallgatoProgram nevű futtatható osztályt Készítsen egy 5 elemű tömböt hallgatók adatainak tárolására Olvasson be a billentyűzetről a hallgatók nevét és kódját, és az adatokkal inicializálja a hallgatók adatait Állítsa be a jegyek számát 10-re, és minden hallgatóhoz generáljon véletlenszerűen az (1-5) tartományban jegyeket Állítsa be minden hallgatónál az ösztöndíjat, melyet a Juttatás metódussal határozzon meg Írassa ki minden Hallgató adatait a képernyőre Írassa ki az utolsó hallgató jegyeit a képernyőre 43/20
Gyakorló példa a számonkérésre Futtatási minta: A hallgató neve: Jenő A hallgató kódja: ab45bb A hallgató neve: Béla A hallgató kódja: 3mz675 A hallgató neve: Éva A hallgató kódja: cc98vv A hallgató neve: Zoli A hallgató kódja: zxa3e4 A hallgató neve: Géza A hallgató kódja: wxyc78 Név: Jenő, Átlag: 3.5, Ösztöndíj: 35000 Név: Béla, Átlag: 4.0, Ösztöndíj: 40000 Név: Éva, Átlag: 2.5, Ösztöndíj: 0 Név: Zoli, Átlag: 2.6, Ösztöndíj: 0 Név: Géza, Átlag: 3.1, Ösztöndíj: 31000 Géza 0. jegye: 5 Géza 1. jegye: 5 Géza 2. jegye: 2 Géza 3. jegye: 3 Géza 4. jegye: 5 Géza 5. jegye: 1 Géza 6. jegye: 3 Géza 7. jegye: 4 Géza 8. jegye: 1 Géza 9. jegye: 2 43/21
HallgatoProgram futtatható osztály 5 hallgató beolvasása tömbbe, 10 jegy generálása hallgatónként, ösztöndíj számítása, hallgatók adatainak kiírása, utolsó hallgató jegyeinek kiírása import java.util.scanner; public class HallgatoProgram { public static void main(string[ ] args) { Scanner sc = new Scanner(System.in); Hallgato [] h = new Hallgato[5]; String s1, s2; for (int i=0; i<5; i++){ System.out.println("A hallgató neve: "); s1 = sc.nextline(); System.out.println("A hallgató kódja: "); s2 = sc.nextline(); h[i]= new Hallgato(s1, s2); h[i].setjegyek(10); for (int j=0; j<10; j++){ h[i].jegybeir(j, 1+(int)(Math.random()*5)); h[i].setosztondij(h[i].juttatas()); 43/22
HallgatoProgram futtatható osztály 5 hallgató beolvasása tömbbe, 10 jegy generálása hallgatónként ösztöndíj számítása, hallgatók adatainak kiírása, utolsó hallgató jegyeinek kiírása for (int i=0; i<5; i++) System.out.println(h[i]); h[4].jegykiir(); 43/23
43/24
Értelmezzük a kódot! public interface IPenzugy { int getfizetes(); void setfizetes(int befiz); Interface: abstract metódusok gyűjteménye A metódusoknak lehet bemenő paramétere! public interface IFeladat { String getfeladat(); void setfeladat(string feladat); public class Alkalmazott implements IFeladat, IPenzugy {... Ha egy osztály implementál egy interface-t, akkor minden metódusát implementálni kell! Hány metódusa lesz? 43/25
Értelmezzük a kódot! public class Alkalmazott implements IFeladat, IPenzugy { private String nev; private String beosztas; private String feladat; private int fizetes; public Alkalmazott(String nev, String beosztas){ this.nev = nev; this.beosztas = beosztas; public int getfizetes(){ return fizetes; public void setfizetes(int befiz){ fizetes = befiz; public interface IPenzugy { int getfizetes(); void setfizetes(int befiz); 43/26
Értelmezzük a kódot! public String getfeladat(){ return feladat; public interface IFeladat { String getfeladat(); void setfeladat(string feladat); public void setfeladat(string befelad){ feladat = befelad; public String tostring(){ return nev+" "+beosztas; Józsi teremőr 43/27
Értelmezzük a kódot! Olyan példányt kell kapnia, ami import java.util.scanner; megvalósítja az IFeladat interfészt! public class MiniMelosProgram { static Scanner sc = new Scanner(System.in); public static void Fonok(IFeladat ifa){ Csak a feladatot kezelheti! System.out.println(ifa+"\n"); System.out.println("Jelenlegi feladat: "+ifa.getfeladat()+"\n"); System.out.println("Új feladat? : "); String fel = sc.nextline(); ifa.setfeladat(fel); public static void Penzugyes(IPenzugy ipu){ Csak a fizetést kezelheti! System.out.println(ipu+"\n"); System.out.println("Jelenlegi fizetés: "+ipu.getfizetes()+"\n"); System.out.println("Új fizetes? : "); String fbe = sc.nextline(); int fiz = Integer.parseInt(fbe); ipu.setfizetes(fiz); 43/28
Értelmezzük a kódot! public static void main(string[ ] args) { Alkalmazott melos = new Alkalmazott("Jenő","mindenes"); Fonok(melos); Penzugyes(melos); System.out.println(melos.toString()+ "-"+melos.getfeladat()+"-"+melos.getfizetes()); Konzol 43/29 Jenő mindenes Jelenlegi feladat: null Új feladat? : takarítás Jenő mindenes Jelenlegi fizetés: 0 Új fizetes? : 20000 Jenő mindenes-takarítás-20000
43/30
Gyakorló példa a számonkérésre 1. Feladat: Készítsen egy Alkoholos nevű interfészt, benne egy mennyialkoholttartalmaz nevű valós eredményt visszaadó metódust 2. Feladat: Készítsen egy Ital nevű osztályt, legyen az adattagja az ital neve Készítsen a névvel inicializáló konstruktort Készítsen getnév metódust Alkosson olyan törzs nélküli metódust, mellyel szövegként visszaadja azt, hogy mibőlkészült az ital Alkosson olyan törzs nélküli metódust, mellyel szövegként visszaadja azt, hogy milyenízű az ital 43/31
Alkoholos interfész, mennyialkoholttartalmaz metódus File\New\Interface public interface Alkoholos { public double mennyialkoholttartalmaz(); 43/32
Ital osztály, név adattag, konstruktor, getnév metódus, törzsnélküli mibőlkészült és milyenízű metódusok public abstract class Ital { private String nev; public Ital(String nev) { this.nev = nev; public String getnev(){ return nev; public abstract String mibolkeszult(); public abstract String milyenizu(); 43/33
Gyakorló példa a számonkérésre 3. Feladat: Készítse el a Gyümölcslé nevű osztályt, az Ital osztály leszármazottjaként Az osztály adattagként tárolja az alapanyag-ot, és a gyümölcslé ízét Legyen az osztálynak olyan konstruktora, mely a három adattag értékével inicializás (név, alapanyag, íz) Valósítsa meg a szükséges metódusokat Az osztály tostring metódusa a következő formában adjon vissza adatot: Hohes C: nem alkoholos, citrom alapú ital 43/34
Gyümölcslé osztály, szülő: Ital, adattagok: alapanyag, íz Konstruktor (név, alapanyag, íz). Metódusok: milyenízű, mibőlkészült tostring: Sió barack: nem alkoholos, barack alapú ital public class Gyumolcsle extends Ital { private String alapanyag; private String iz; public Gyumolcsle(String nev, String alap, String iz) { super(nev); alapanyag = alap; this.iz = iz; public String milyenizu() { return iz; public String mibolkeszult(){ return alapanyag; public String tostring() { return getnev()+": nem alkoholos, "+alapanyag+" alapú ital"; 43/35
Gyakorló példa a számonkérésre 4. Feladat: Készítse el a AlkoholosItal nevű osztályt, az Ital osztály leszármazottjaként, melyben megvalósítja az Alkoholos interfészt Az osztály adattagként tárolja az alapanyag-ot, és a gyümölcslé ízét, és az alkoholtartalmat (0-1 közötti valós szám) Legyen az osztálynak olyan konstruktora, mely a négy adattag értékével inicializás (név, alapanyag, íz, alkohol) Valósítsa meg a szükséges metódusokat Az osztály tostring metódusa a következő formában adjon vissza adatot: Pálinka: 40.0% alkohol tartalmú ital 43/36
AlkoholosItal osztály, szülő: Ital, implementálja az Alkoholos interfészt adattagok: alapanyag, íz, alkohol. Konstruktor (név, alapanyag, íz, alkohol). Metódusok: milyenízű, mibőlkészült tostring: Pálinka: 40.0% alkohol tartalmú ital public class AlkoholosItal extends Ital implements Alkoholos { private String alapanyag; private String iz; private double alkoholtartalom; public AlkoholosItal(String nev, String alap, String iz, double alk) { super(nev); alapanyag = alap; this.iz = iz; alkoholtartalom = alk; public String milyenizu() { return iz; public String mibolkeszult(){ return alapanyag; public String tostring() { return getnev()+": "+alkoholtartalom*100+"% "+ " alkohol tartalmú ital"; 43/37
Gyakorló példa a számonkérésre 5. Feladat: Készítsen egy AbsztinensProgram nevű futtatható osztályt Készítsen egy osztályszintű elfogyaszt nevű metódust, mely egy italt kap paraméterül. Kiírja a kapott ital nevét, és ha az ital alkoholos, akkor a "Köszönöm, nem kérem! Alkoholt tartalmaz!" szöveget, egyébként a "Megittam, finom volt!" szöveget. Hozzon létre egy 4 elemű Ital típusú tömböt Töltse fel 2 Gyümölcslével, és 2 AlkoholosItal-lal Fogyassza el az italokat 43/38
Gyakorló példa a számonkérésre Futtatási minta: Megkínáltak a következővel: Sió barack: nem alkoholos, barack alapú ital Megittam, finom volt! Megkínáltak a következővel: Sör: 5.0% alkohol tartalmú ital Köszönöm, nem kérem! Alkoholt tartalmaz! Megkínáltak a következővel: Hohes C: nem alkoholos, citrom alapú ital Megittam, finom volt! Megkínáltak a következővel: Pálinka: 40.0% alkohol tartalmú ital Köszönöm, nem kérem! Alkoholt tartalmaz! 43/39
AbsztinensProgram futtatható osztály elfogyaszt osztály metódus, 4 elemű Ital tömb, feltöltés adatokkal, italok elfogyasztása public class AbsztinensProgram { public static void elfogyaszt(ital i) { System.out.println("Megkínáltak a következővel: "+i); if (i instanceof Alkoholos) System.out.println("Köszönöm, nem kérem! Alkoholt tartalmaz!"); else System.out.println("Megittam, finom volt!"); public static void main(string[ ] args) { Ital [ ] ital = new Ital [4]; ital[0] = new Gyumolcsle("Sió barack", "barack", "édes"); ital[1] = new AlkoholosItal("Sör", "komló", "keserű", 0.05); ital[2] = new Gyumolcsle("Hohes C", "citrom", "savanykás"); ital[3] = new AlkoholosItal("Pálinka", "szilva", "szilva", 0.4); for (int i=0; i<4; i++) AbsztinensProgram.elfogyaszt(ital[i]); 43/40
Konzol Megkínáltak a következővel: Sió barack: nem alkoholos, barack alapú ital Megittam, finom volt! Megkínáltak a következővel: Sör: 5.0% alkohol tartalmú ital Köszönöm, nem kérem! Alkoholt tartalmaz! Megkínáltak a következővel: Hohes C: nem alkoholos, citrom alapú ital Megittam, finom volt! Megkínáltak a következővel: Pálinka: 40.0% alkohol tartalmú ital Köszönöm, nem kérem! Alkoholt tartalmaz! 43/41
43/42
VÉGE VÉGE 43/43