Okt. 15. 2. Készítsen egy KaveAutomata osztályt, melynek adatai: kávémárka, ár (Ft/dl), a tartályban lévő mennyiség, a tartály kapacitása. A konstruktor paramétereken keresztül inicializálja a fajtát, az árat és a kapacitást, a tartály legyen tele. Készítse el az alábbi metódusokat: - beállító és lekérdező metódusok az árra. - vesz: paraméterként adhatjuk meg, hogy hány dl-t veszünk, visszatérési érték a fizetendő összeg. Ha nincs a venni kívánt mennyiség a tartályban, akkor -1 legyen a visszatérési érték. - feltölt: tele tölti a tartályt, visszatérési értéke a betöltött mennyiség. - toString: az összes adat kiírására. A vezérlő KaveProgram osztályban hozzon létre egy KaveAutomata osztályú objektumot, majd szimulálja a működését. import extra.*; class KaveAutomata{ private String marka; private double ar; private double mennyiseg; private double kapacitas; public KaveAutomata(String marka, double ar, double kapacitas){ this.marka = marka; this.ar = ar; this.kapacitas = kapacitas; mennyiseg = kapacitas; } /* vagy public KaveAutomata(String aMarka, double aAr, double aKapacitas){ marka = aMarka; ar = aAr; kapacitas = aKapacitas; mennyiseg = kapacitas; } */ public double getAr(){ return ar; } public void setAr(double ar){ this.ar = ar; } //a feledatspecifikációban nem szereplő plussz metódus public double getMennyiseg(){ return mennyiseg; } public double vesz(double menny){ if (menny<=mennyiseg){ mennyiseg-=menny; return menny*ar; } else{ return -1; } } public double feltolt(){ double kell=kapacitas-mennyiseg; mennyiseg=kapacitas; return kell; } public String toString(){ return "\nMarka: "+marka+"\nAr: "+ar+"\nKapacitas: "+kapacitas+ " Mennyiseg: "+mennyiseg; } } public class KaveProgram{ public static void main(String[] args) { KaveAutomata automata = new KaveAutomata("Omnia",100,50); //Például: egy ciklusban ismételten vásárolunk az automatából, amíg ki nem ürül. //Utána feltöltjük. double fiz; do{ fiz = automata.vesz(Console.readDouble("Hany decit: ")); if (fiz!=-1){ System.out.println(fiz+" Ft-ot kell fizetnie"); }else{ System.out.println("Nincs annyi"); } System.out.println(automata); }while(automata.getMennyiseg()>1); System.out.println("Feltoltes "+automata.feltolt()+" dl"); } } ----------------- A vezérlő osztály bonyolultabb módon, mikor abból is hozunk létre objektumot: public class KaveProgram{ private KaveAutomata automata; public KaveProgram(){ automata = new KaveAutomata("Omnia",100,50); } public void vezerel(){ double fiz; do{ fiz = automata.vesz(Console.readDouble("Hany decit: ")); if (fiz!=-1){ System.out.println(fiz+" Ft-ot kell fizetnie"); }else{ System.out.println("Nincs annyi"); } System.out.println(automata); }while(automata.getMennyiseg()>1); System.out.println("Feltoltes "+automata.feltolt()+" dl"); } public static void main(String[] args) { KaveProgram kaveProgram = new KaveProgram(); kaveProgram.vezerel(); } } -------------------------------------------------------------------------- 3. Egy terepasztal működését akarjuk szimulálni. Készítsen egy Auto osztályt, melynek adatai: rendszám, x pozíció, y pozíció, szög. A konstruktor paramétereken keresztül inicializálja a rendszámot, x pozíciót, y pozíciót, a szöget állítsa 0-ra. Készítse el az alábbi metódusokat: - beállító és lekérdező metódusok a rendszámra. - megy: az autó az aktuális irányában a paraméterként megadott távolságot tegye meg. - fordul: a paraméterként megadott szöggel forduljon el. - toString: a rendszám és a pozíció kiírására. A vezérlő Terepasztal osztályban hozzon létre két Auto osztályú objektumot, majd szimulálja azok működését. class Auto{ private String rendszam; private int x, y, iranyszog; public Auto(String rendszam, int x, int y){ this.rendszam = rendszam; this.x = x; this.y = y; iranyszog = 0; } public void setRendszam(String aRendszam){ rendszam = aRendszam; } public String getRendszam(){ return rendszam; } public void megy(int tav){ x += tav * Math.cos(Math.toRadians(iranyszog)); y += tav * Math.sin(Math.toRadians(iranyszog)); } public void fordul(int szog){ iranyszog += szog; } public String toString(){ return rendszam+" pozicioja: ("+x+", "+y+")"; } } public class Terepasztal{ public static void main(String [] args){ Auto auto1, auto2; auto1 = new Auto("ABC123",10,20); auto2 = new Auto("XYZ123",0,0); //Például: System.out.println(auto1+"\n"+auto2+"\n"); auto1.megy(10); System.out.println(auto1+"\n"+auto2+"\n"); auto1.fordul(30); System.out.println(auto1+"\n"+auto2+"\n"); auto1.megy(20); System.out.println(auto1+"\n"+auto2+"\n"); auto2.fordul(150); System.out.println(auto1+"\n"+auto2+"\n"); auto2.megy(20); System.out.println(auto1+"\n"+auto2+"\n"); } } ----------------- A vezérlő osztály bonyolultabb módon, mikor abból is hozunk létre objektumot: public class Terepasztal{ private Auto auto1, auto2; public Terepasztal(){ auto1 = new Auto("ABC123",10,20); auto2 = new Auto("XYZ123",0,0); } public void vezerel(){ System.out.println(auto1+"\n"+auto2+"\n"); auto1.megy(10); System.out.println(auto1+"\n"+auto2+"\n"); auto1.fordul(30); System.out.println(auto1+"\n"+auto2+"\n"); auto1.megy(20); System.out.println(auto1+"\n"+auto2+"\n"); auto2.fordul(150); System.out.println(auto1+"\n"+auto2+"\n"); auto2.megy(20); System.out.println(auto1+"\n"+auto2+"\n"); } public static void main(String [] args){ Terepasztal terepasztal = new Terepasztal(); terepasztal.vezerel(); } } ---------------------------------------------------------- 4. Az előadáson látott program Szamla osztályát egészítse ki egy kamat osztályváltozóval, ennek beállító és lekérdező metódusaival valamint az éves kamatjóváírást elvégző metódussal. A Bank osztály menüjét is bővítse ki. import extra.*; class Szamla{ private static int utolsoSzamlaSzam=0; private int szamlaSzam; private String tulajdonos; private int egyenleg; private static double kamat=2.5; public Szamla(String tulajdonos, int egyenleg){ szamlaSzam=++utolsoSzamlaSzam; this.tulajdonos=tulajdonos; this.egyenleg=egyenleg; } public Szamla(String tulajdonos){ this(tulajdonos,0); } public String getTulajdonos(){ return tulajdonos; } public void setTulajdonos(String tulajdonos){ this.tulajdonos=tulajdonos; } public void befizet(int osszeg){ if(osszeg>=0) egyenleg+=osszeg; } public int kivesz(int osszeg){ if(osszeg>=0 && osszeg<=egyenleg) egyenleg-=osszeg; return egyenleg; } public String toString() { return "Szamlaszam: "+szamlaSzam+" Tulajd.: "+tulajdonos+" Egyenleg: "+egyenleg; } public static double getKamat(){ return kamat; } public static void setKamat(double k){ if(k>=0) kamat=k; } public void kamatjovairas(){ egyenleg*=(1+kamat/100); } }//Számla osztály vége public class Bank2 { private Szamla szamla1, szamla2; public Bank2() { szamla1 = new Szamla("Kiss Istvan", 1000000); szamla2 = new Szamla("Nagy Peter"); } public void ugyfelKiszolgalas(Szamla szamla) { char valasz; do{ valasz = Character.toUpperCase(Console.readChar("B(efizet)/K(ivesz)")); }while(valasz!='B' && valasz!='K'); if (valasz == 'B') szamla.befizet(Console.readInt("Mennyit fizet be? ")); else{ int egyenleg = szamla.kivesz(Console.readInt("Mennyit vesz ki? ")); System.out.println("Maradek egyenleg "+egyenleg+" Ft"); } } public void menu() { char valasz; do{ System.out.println("\n\n"+szamla1); System.out.println(szamla2); System.out.println("\n1: 1. ugyfel kiszolgalasa"); System.out.println("2: 2. ugyfel kiszolgalasa"); System.out.println("3: 3. kamatjovairas"); System.out.print ("V: Vege "); valasz = Character.toUpperCase(Console.readChar()); switch (valasz) { case '1': ugyfelKiszolgalas(szamla1); break; case '2': ugyfelKiszolgalas(szamla2); break; case '3': szamla1.kamatjovairas(); szamla2.kamatjovairas(); break; } }while (valasz!='V'); } public static void main(String[] args) { Bank2 otp = new Bank2(); otp.menu(); } }//Bank osztály vége ----------------------------------------------------------------------------- 5. Borfesztivált rendeznek, ahol egy nagy hordóból bort osztanak. Készítsen egy Hordo osztályt, melynek adatai: kapacitás, mennyiség. A konstruktora paraméteren keresztül inicializálja a kapacitást, és töltse tele. Készítse el az alábbi metódusokat: - van: a paramétereként megadott mennyiség van-e még a hordóban; - kitolt: paraméterként kapja a kitölteni kívánt mennyiséget. Ha van benne annyi, kitölti és igaz értékkel tér vissza, ha nincs benne annyi, akkor nem tölt ki semennyit és hamis értékkel tér vissza; - toString: kiírja a hordó adatait. Írjon egy vezérlő osztályt, és osztogasson bor, amíg el nem fogy. import extra.*; class Hordo { private double kapacitas, mennyiseg; public Hordo(double kapacitas) { this.kapacitas = kapacitas; mennyiseg = kapacitas; } public boolean van(double menny) { return mennyiseg >= menny; } public boolean kitolt(double menny) { boolean ok = van(menny); if (ok) mennyiseg -= menny; return ok; } public String toString() { return "Kapacitas:"+Format.right(kapacitas,5,2)+ " Mennyiseg:"+Format.right(mennyiseg,5,2); } } public class Borfesztival { private Hordo hordo; public Borfesztival() { hordo = new Hordo(100); } public void osztogat() { do { System.out.println(hordo); double menny = Console.readDouble("Mennyit? "); if (!hordo.kitolt(menny)) System.out.println("Sajnalom, nincs annyi!"); } while (hordo.van(0.1)); System.out.println("Elfogyott!"); } public static void main(String[] args) { Borfesztival borfesztival = new Borfesztival(); borfesztival.osztogat(); } } ----------------------------------------------------------------------------- 6. Készítsen egy Tört osztályt, mely két adatot tartalmaz: számláló, nevező. A konstruktor paramétereken keresztül inicializálja a két adatot. Készítse el az osztály következő metódusait: - beállító és lekérdező metódusok a két adatra ill. a tört értékének lekérdezésére; - a tört egyszerűsítésére; - paraméterben megadható számmal való bővítésére; - toString pl: A tort erteke: 4/5. Írjon egy TörtProgram osztályt a tesztelésére. class Tort{ private int szamlalo; private int nevezo; public Tort(int szamlalo,int nevezo){ this.szamlalo=szamlalo; this.nevezo=nevezo; } public int getSzamlalo(){ return szamlalo; } public int getNevezo(){ return nevezo; } public void setSzamlalo(int szamlalo){ this.szamlalo=szamlalo; } public void setNevezo(int nevezo){ this.nevezo=nevezo; } public double getErtek(){ return 1.0*szamlalo/nevezo; } public void egyszerusit(){ int sz=szamlalo; int n=nevezo; while(n!=0){ int m=sz%n; sz=n; n=m; } szamlalo/=sz; nevezo/=sz; } public void bovit(int szam){ szamlalo*=szam; nevezo*=szam; } public String toString(){ return "A tort: "+szamlalo+"/"+nevezo; } } public class TortProgram{ public static void main(String[]args){ Tort t=new Tort(6,8); System.out.println(t); t.bovit(5); System.out.println(t); t.egyszerusit(); System.out.println(t); } } ---------------------------------------------------------------------- 7. Készítsen egy Másodfokú osztályt, melynek adatai a másodfokú polinom együtthatói: a, b, c. A konstruktor paramétereken keresztül inicializálja az adatokat. A getD() metódus adja vissza a diszkriminánst, a getValósMegoldásokSzáma() a gyökök számát, getX1(), getX2() pedig a két gyököt. class Masodfoku{ private double a; private double b; private double c; public Masodfoku(double a, double b, double c){ this.a=a; this.b=b; this.c=c; } public double getD(){ return b*b-4*a*c; } public int getValosMegoldasokSzama(){ if(getD()>0) return 2; else if(getD()==0) return 1; else return 0; } public double getX1(){ return (-b+Math.sqrt(getD()))/2; } public double getX2(){ return (-b-Math.sqrt(getD()))/2; } } --------------------------------------------------------------------