Programozási nyelvek II.: JAVA, 3. gyakorlat

Hasonló dokumentumok
Programozási nyelvek II.: JAVA, 11. gyakorlat

Osztályok. 4. gyakorlat

OOP: Java 8.Gy: Abstract osztályok, interfészek

Programozási nyelvek II.: JAVA

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

JAVA PROGRAMOZÁS 2.ELŐADÁS

Adatszerkezetek és algoritmusok

OOP: Java 4.Gy: Java osztályok

Programozási nyelvek II.: JAVA

Java és web programozás

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

Programozási nyelvek II.: JAVA, 4. gyakorlat

3. Osztályok II. Programozás II

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Java programozási nyelv 4. rész Osztályok II.

Programozási nyelvek Java

Programozási nyelvek Java

Java V. Osztályszint. lyszintű ű tagok. Példányváltozó. Osztályváltozó. Általános Informatikai Tanszék Utolsó módosítás:

C# osztálydeníció. Krizsán Zoltán 1. .net C# technológiák tananyag objektum orientált programozás tananyag

Java programozási nyelv 5. rész Osztályok III.

Objektum Orientált Programozás. 5. JAVA osztályok 21/1B IT MAN

Programozási nyelvek Java

Programozási nyelvek II.: JAVA, 4. gyakorlat

Programozás I. Első ZH segédlet

Java VII. Polimorfizmus a Java nyelvben

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Objektumelvű programozás

Java és web programozás

OOP: Java 5.Gy: Osztály, referencia, konstruktor

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Java VII. Polimorfizmus a Java nyelvben

OOP: Java 8.Gy: Gyakorlás

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

Programozási nyelvek Java

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Objektumok inicializálása

OOP #14 (referencia-elv)

Bevezetés a Python programozási nyelvbe

Java Programozás 3. Ea: Java osztályok. OOP alapalapok

BME MOGI Gépészeti informatika 7.

Java III. I I. Osztálydefiníció (Bevezetés)

és az instanceof operátor

Java III. I I. Osztálydefiníció (Bevezetés)

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Programozási nyelvek Java

III. OOP (objektumok, osztályok)

Objektumorientált programozás IX. Osztályok, objektumok

Programozási nyelvek II. JAVA

Virtuális függvények (late binding)

Objektumorientált programozás C# nyelven

Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Kalapácsvetés 2016 szöveges

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Programozás II gyakorlat. 8. Operátor túlterhelés

OOP: Java 6.Gy: Java osztályok. Definíció, static, túlterhelés

4. Gy: JAVA osztályok

Származtatási mechanizmus a C++ nyelvben

Generikus Típusok, Kollekciók

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

Osztálytervezés és implementációs ajánlások

Osztálytervezés és implementációs ajánlások

C#, OOP. Osztályok tervezése C#-ban

GenerikusOsztály<objektumtípus> objektum = new GenerikusOsztály<objektumtípus>();

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

Java és web programozás

Objektumorientált Programozás VI.

mul : S T N 1 ha t S mul(s, t) := 0 egyébként Keresés Ezt az eljárást a publikus m veletek lenti megvalósításánál használjuk.

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Collections. Összetett adatstruktúrák

Java IX. telkezelés a Java-ban

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Java IX. telkezelés a Java-ban

Java és web programozás

Segédanyag: Java alkalmazások gyakorlat

Programozás II. labor

Objektumorientált programozás C# nyelven

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás

BME MOGI Gépészeti informatika 8.

Web-technológia PHP-vel

A gyakorlat során az alábbi ábrán látható négy entitáshoz kapcsolódó adatbevitelt fogjuk megoldani.

STL gyakorlat C++ Izsó Tamás május 9. Izsó Tamás STL gyakorlat/ 1

Java és web programozás

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

Java és web programozás

Mi a különbség az extends és az implements között. Mikor melyiket kell használni? Comperable-t megvalósító oasztályokban össze lehet hasonlitani

Programozás BMEKOKAA146. Dr. Bécsi Tamás 5. előadás

Programozás módszertan

Elemi adatszerkezetek

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:

Objektum orientált kiterjesztés A+ programozási nyelvhez

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

500. AA Megoldó Alfréd AA 500.

Adatszerkezetek és algoritmusok

7. K: JAVA alapok Konzultáció

Programozás I. Objektum-orientált programozás Stringműveletek V 1.0 ÓE-NIK-AII,

A C programozási nyelv III. Pointerek és tömbök.

Globális operátor overloading

Átírás:

Programozási nyelvek II.: JAVA, 3. gyakorlat 2017. szeptember 25-29. 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 1 / 50

A 3. gyakorlat tematikája Osztályok deníciója Láthatósági módosítók Getterek és setterek A this pszeudováltozó Konstruktorok, túlterhelés 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 2 / 50

Osztályok deníciója programok strukturálására implementációs részletek elrejtése összetartozó fogalmak egységbe zárása (encapsulation) saját típus létrehozása + típuson értelmezett m veletek osztálydeníció = adattagok + m veletek (metódusok) + egyéb osztályok static módosító: osztályszint (adattag / metódus) 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 3 / 50

Pontok osztálya (Point.java) Készítsük el a Point osztályt (Point.java)! Tulajdonságok: x és y koordináta (mindkett double típusú) M velet: eltolás: dx és dy értékekkel eltolja a pontot (mindkett double típusú) 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 4 / 50

Pontok osztálya (Point.java) class Point { double x ; double y ; void move ( double dx, double dy ) { x += dx ; y += dy ; 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 5 / 50

Körök osztálya (Circle.java) Készítsük el a kört reprezentáló Circle osztályt (Circle.java)! Tulajdonságok: középpont (Point) és sugár (double) M veletek: eltolás és nagyítás eltolás: dx és dy értékekkel eltolja a középpontot (mindkett double típusú) nagyítás: egy adott számmal szorozza a sugarat (factor double típusú) 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 6 / 50

Körök osztálya (Circle.java) class Circle { Point center ; double radius ; void move ( double dx, double dy ) { center. move ( dx, dy ); void enlarge ( double factor ) { radius *= factor ; 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 7 / 50

Láthatóság Motiváció: az objektum állapotát kívülr l ne tudjuk tetsz leges módon megváltoztatni az osztályokban a metódusok viselkedése a felhasználó számára mindig lényegében egy fekete doboz 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 8 / 50

Láthatósági módosítók Minden adattagra és minden metódusra pontosan egy láthatósági (hozzáférési) kategória vonatkozhat, ezért az alább megadott módosítószavak közül pontosan egyet lehet használni minden egyes tag és metódus esetében. A láthatósági kategóriák (módosítószavak) a következ k: Félnyilvános (package-private): ha nem írunk semmit azonos csomagban deniált osztályok (objektumai) érik csak el Nyilvános: public más csomagokban deniált osztályok is elérik pl. a f programnak is ilyennek kell lennie, hogy futtatható legyen: public static void main(string[] args) Privát: private csak az osztálydeníción belül érhet el az osztály minden objektuma hozzáfér Védett: protected a félnyilvános kategória kiterjesztése: azonos csomagban lév, plusz a leszármazottak (ld. kés bb) 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 9 / 50

Láthatósági reláció public protected package-private private Módosító osztály csomag leszármazott mindenki public igen igen igen igen protected igen igen igen nem nincs (package-private) igen igen nem nem private igen nem nem nem 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 10 / 50

Getterek és setterek Adattagok privatetá tétele: ilyenkor az adattaghoz készíthet egy lekérdez ("getter") metódus, amellyel az adattag értékét le tudjuk kérdezni, a lekérdez metódus már bárki által hívható lesz. A referenciák esetében: a lekérdez metódus ne közvetlenül magát a referenciát adja vissza, hanem mindig másolja le az általa hivatkozott objektumot! (kivéve, ha az objektum immutable, mint pl. a String osztály objektumai) Adattag kívülr l írhatóvá tétele: beállító ("setter") metódust készítünk hozzá. Ennek a metódusnak a feladata, hogy - szükség esetén - ellen rizze, hogy az új érték megfelel -e. A referenciák esetében a beállító metódus is másolja le a hivatkozott objektumot! (kivéve, ha az objektum immutable) 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 11 / 50

A this pszeudováltozó Predenit név. Az osztálydeníción belül a példánymetódusokban this névvel hivatkozhatunk az aktuális objektumra. A static metódusokban a this nem használható. A this.xxxhez általában nem kell a min sítés, néha azonban szükség lehet rá (pl. ha a metódus paramétere ugyanolyan nev, mint az adattag) A this paraméterként is átadható. 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 12 / 50

Pontok és Körök osztálya (Point.java, Circle.java) Készítsünk lekérdez és beállító m veleteket (metódusokat), amelyekkel le tudjuk kérdezni / be tudjuk állítani a pontok és a körök attribútumait (egy pont x és y koordinátáját, valamint egy kör középpontját és sugarát)! A metódusok legyenek publikusak! (Az adattagok nem publikusak!) Használjuk a this pszeudováltozót! 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 13 / 50

Pontok osztálya (Point.java) public class Point { private double x ; private double y ; public double getx () { return x ; public double gety () { return y ;... 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 14 / 50

Pontok osztálya (Point.java) (folyt.)... public void setx ( double x ) { this. x = x ; public void sety ( double y ) { this. y = y ; public void move ( double dx, double dy ) { x += dx ; y += dy ; 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 15 / 50

Körök osztálya (Circle.java) public class Circle { private Point center ; private double radius ; public Point getcenter () { Point result = new Point (); result. setx ( center. getx ()); result. sety ( center. gety ()); return result ; public void setcenter ( Point center ) { this. center = new Point (); this. center. setx ( center. getx ()); this. center. sety ( center. gety ());... 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 16 / 50

Körök osztálya (Circle.java)(folyt.)... public double getradius () { return radius ; public void setradius ( double r ) { if ( r < 0.0) r = 0.0; radius = r ; public void move ( double dx, double dy ) { center. move ( dx, dy ); public void enlarge ( double factor ) { radius *= factor ; 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 17 / 50

F program (PointCircleTest.java) Készítsünk tesztprogramot a pontok és körök osztályához! Hozzunk létre egy Point és egy Circle objektumot! Kérdezzük le és állítsuk be a pont koordinátáit! Toljuk el a pontot megadott értékkel! Legyen a pont a kör középpontja, állítsuk be a sugarát! Toljuk el, nagyítsuk a kört! Kérdezzük le a középpontját és a sugarát! 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 18 / 50

F program (PointCircleTest.java) public class PointCircleTest { public static void main ( String [] args ) { Point p = new Point (); System. out. println ( p. getx ()); System. out. println ( p. gety ()); p. setx (1.23); p. sety (2.56); System. out. println ( p. getx ()); System. out. println ( p. gety ()); p. move (1.22,1.33); System. out. println ( p. getx ()); System. out. println ( p. gety ());... 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 19 / 50

F program (PointCircleTest.java)(folyt.)... Circle c = new Circle (); c. setcenter ( p ); c. setradius (3.21); System. out. println ( c. getradius ()); c. move (1.22,1.33); System. out. println ( c. getcenter (). getx ()); System. out. println ( c. getcenter (). gety ()); c. enlarge (2); System. out. println ( c. getcenter (). getx ()); System. out. println ( c. getcenter (). gety ()); System. out. println ( c. getradius ()); 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 20 / 50

Konstruktorok Programkód, ami a példányosításkor "automatikusan" végrehajtódik. A konstruktor neve megegyezik az osztály nevével. A konstruktor paramétereket vehet át. Több (különböz szignatúrájú) konstruktor is lehet egy osztályban (túlterhelés, ld. kés bb). Csak példányosításkor hajtódhat végre (new mellett). A konstruktor mindig eljárás, de konstruktor esetében szintaxishiba kiírni a void-ot! 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 21 / 50

Konstruktorok Módosítók közül csak a láthatósági kategóriát leírók használhatók (egyéb módosítók, pl. a static vagy a final, nem). A törzs olyan, mint egy void visszatérési érték metódusé, a paraméter nélküli returnt használhatjuk. Bevett szokás, hogy ugyanazokat a neveket használhatjuk konstruktor formális paraméternek, mint a példányváltozóknak (ekkor az adattagot a this-en keresztül érjük el). Egy konstruktor meghívhat egy másik konstruktort is, this névvel: az eajta konstruktormeghívás csak az els utasítás lehet! 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 22 / 50

Konstruktorok A láthatósági kategóriák vonatkoznak a konstruktorokra is. A konstruktor használata: new Osztálynév után paraméterek megadása zárójelben. Aktuális argumentumok a konstruktornak: ezek döntik el, hogy melyik konstruktor hívódik meg. Ha nem írtunk konstruktort, akkor automatikusan (és csak ekkor) létrejön egy ilyen, a fordítóprogram beilleszt a kódba egy ún. default konstruktort, amely paraméter nélküli és üres törzs. Pl. mintha a Pointba bekerülne egy ilyen: public Point (){ Minden default konstruktor paraméter nélküli, de nem minden paraméter nélküli konstruktor default. 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 23 / 50

Túlterhelés (overloading) Az osztályok metódusainak és konstruktorainak lehet többféle paraméterezése. Ilyenkor egyetlen névhez társítunk többféle viselkedést (több metódust nevezünk el ugyanazzal a névvel). A megfelel változatot a paraméterlista alapján választjuk ki. A metódusokat a visszatérési értékre nem lehet túlterhelni. 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 24 / 50

Konstruktorok készítése, túlterhelés A Point és Circle osztályokhoz készítsünk konstruktorokat! A Point osztályhoz csak egyet, amelynek a koordinátákat lehet átadni. A Circle osztályhoz hármat: amelynek a sugár mellett egy Point objektumot, illetve a középpont koordinátáit lehet átadni, valamint egy paraméter nélküli konstruktort. 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 25 / 50

Pontok osztálya (Point.java) public class Point { private double x ; private double y ; public Point ( double x, double y ) { this. x = x ; this. y = y ; public double getx () { return x ; public double gety () { return y ;... 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 26 / 50

Pontok osztálya (Point.java) (folyt.)... public void setx ( double x ) { this. x = x ; public void sety ( double y ) { this. y = y ; public void move ( double dx, double dy ) { x += dx ; y += dy ; 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 27 / 50

Körök osztálya (Circle.java) public class Circle { private Point center ; private double radius ; public Circle ( Point p, double radius ) { center = new Point ( p. getx (), p. gety ()); this. radius = radius ; public Circle ( double x, double y ) { center = new Point (x, y );... 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 28 / 50

Körök osztálya (Circle.java)(folyt.)... public Circle () { // a double - double parameteru konstruktor hivasa this (0.0,0.0); public Point getcenter () { return new Point ( center. getx (), center. gety ()); public void setcenter ( Point center ) { this. center = new Point ( center. getx (), center. gety ()); 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 29 / 50

Körök osztálya (Circle.java)(folyt.)... public double getradius () { return radius ; public void setradius ( double r ) { if ( r < 0.0) r = 0.0; radius = r ; public void move ( double dx, double dy ) { center. move ( dx, dy ); public void enlarge ( double factor ) { radius *= factor ; 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 30 / 50

F program (PointCircleTest.java) public class PointCircleTest { public static void main ( String [] args ) { Point p = new Point (1.22,1.33); System. out. println ( p. getx ()); System. out. println ( p. gety ()); p. setx (1.23); p. sety (2.56); System. out. println ( p. getx ()); System. out. println ( p. gety ()); p. move (1.22,1.33); System. out. println ( p. getx ()); System. out. println ( p. gety ());... 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 31 / 50

F program (PointCircleTest.java) (folyt.)... Circle c = new Circle (); c. setcenter ( p ); c. setradius (3.21); System. out. println ( c. getradius ()); c. move (1.22,1.33); System. out. println ( c. getcenter (). getx ()); System. out. println ( c. getcenter (). gety ()); c. enlarge (2); System. out. println ( c. getcenter (). getx ()); System. out. println ( c. getcenter (). gety ()); System. out. println ( c. getradius ());... 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 32 / 50

F program (PointCircleTest.java) (folyt.)... Point q = new Point (1.1, 2.2); System. out. println ( q. getx ()); System. out. println ( q. gety ()); Circle a = new Circle (q, 3.4); System. out. println ( a. getcenter (). getx ()); System. out. println ( a. getcenter (). gety ()); System. out. println ( a. getradius ());... 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 33 / 50

F program (PointCircleTest.java) (folyt.)... Circle b = new Circle (1.3,4.5); System. out. println ( b. getcenter (). getx ()); System. out. println ( b. getcenter (). gety ()); System. out. println ( b. getradius ()); Circle d = new Circle (); System. out. println ( d. getcenter (). getx ()); System. out. println ( d. getcenter (). gety ()); System. out. println ( d. getradius ());... 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 34 / 50

Objektumok szöveges reprezentációja (Point.java) Készítsünk a Point osztályba egy szöveges visszatérési érték, paraméter nélküli, tostring nev publikus metódust, amely visszaadja egy pont szöveges reprezentációját.... public String tostring () { return " ( " + x + "," + y + " ) " ;... 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 35 / 50

Tömbök használata tömb deklarálása: típus[] tömb; a típus lehet primitív típus vagy osztály, de akár tömb is tömb létrehozása: tömb = new típus[méret]; a tömb elemei "null-szer " értékkel tölt dnek fel tömb létrehozása és kezd értékkel történ beállítása: tömb = {elem 1, elem 2,..., elem n ; tömb elemeinek száma: tömb.length i. elem elérése: tömb[i] tömb bejárása: léptet ciklussal: for( int i = 0; i < tömb.length; ++i ) { ahol i sorban felveszi a tömb indexeit iteráló ciklussal: for( típus t : tömb ) { ahol t sorban felveszi a tömb elemeit 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 36 / 50

Tömegközéppont meghatározása (PointCircleTest.java) Készítsünk egy centerofmass nev statikus metódust a PointCircleTest osztályba. A metódus paraméterül egy pontokból álló tömböt kap. Feladata pedig, hogy kiszámítsa a kapott pontok tömegközéppontját (ami szintén egy pont), majd az eredményt visszaadja. Készítsünk egy centerofmasstest nev statikus metódust a PointCircleTest osztályba. A metódus hozzon létre két pontokból álló tömböt és (az el z metódus segítségével) mindkett nek számítsa ki a középpontját, majd az eredményt írja ki. A PointCircleTest osztály main metódusából hívjuk meg a centerofmasstest metódust. 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 37 / 50

Tömegközéppont meghatározása (PointCircleTest.java)... public static Point centerofmass ( Point [] points ) { double cx = 0.0; double cy = 0.0; for ( Point p : points ) { cx += p. getx (); cy += p. gety (); cx /= points. length ; cy /= points. length ;... return new Point ( cx, cy ); 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 38 / 50

Tömegközéppont meghatározása (PointCircleTest.java)... public static void centerofmasstest (){ Point [] points1 = new Point [3]; points1 [0] = new Point (2.0,4.0); points1 [1] = new Point (3.0,6.0); points1 [2] = new Point (1.0,2.0); Point [] points2 = { new Point (1.0,2.0), new Point (2.0,4.0), new Point (3.0,6.0) ;... System. out. println ( " centerofmass ( points1 )== " + centerofmass ( points1 )); System. out. println ( " centerofmass ( points2 )== " + centerofmass ( points2 )); 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 39 / 50

2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 40 / 50

Hibajavítás (Kangaroo.java, KangarooDemo.java) A Kangaroo osztály egy kengurut reprezentál. Az osztálynak két adattagja van, az egyik egy szöveges típusú, a kenguru nevének, a másik egész típusú és az életkorának az eltárolására szolgál. Az osztálynak két konstruktora van. Az els egy szöveges típusú nevet és egy egész típusú életkort kap paraméterként és beállítja a megfelel adattagokat. A második konstruktor egy egész típusú értéket kap és kiírja a kenguru lábainak számát. Az osztály rendelkezik egy display nev metódussal is, egy szöveges típusú országnevet kap paraméterül, és kiírja a kenguru nevét, lakóhelyét (az országot), majd eggyel megnöveli az életkorát és az új életkort is kiírja. 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 41 / 50

Pontok és körök osztálya (Point.java, Circle.java, PointCircleTest.java) Egészítsük ki a Point és a Circle osztályát az alábbi m veletekkel: a Point osztályban deniáljunk egy metódust, amely megadja az objektum távolságát egy, a paramétereként átadott Point objektumtól; a Point osztályban deniáljunk egy statikus metódust, amely két pont távolságát adja meg; a Circle osztályban is készítsük el a tostring metódust; a kör területének kiszámítása; 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 42 / 50

Pontok és Körök osztálya (Point.java, Circle.java, PointCircleTest.java) a Circle osztályhoz írjunk egy m veletet, amely eldönti, hogy a paramétereként megadott Point objektum illeszkedike a körvonalra egy adott t réshatáron belül; a Circle osztályhoz írjunk egy m veletet, amely eldönti, hogy a paramétereként megadott Point objektum a Circle belsejében vane. Készítsünk f programot is! Oldjuk meg a feladatot csomagok nélkül és csomagokkal is (rakjuk a Circle osztályt a geo, a Point osztályt a utils.basics, a f programot pedig a main csomagba)! 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 43 / 50

Bináris fa osztály (IntTree.java, IntTreeTest.java) Készítsünk egy utils.inttree osztályt! A utils.inttree osztály egy egész számokat tartalmazó bináris rendez fa. A bináris fa értékek olyan láncolata, ahol minden értéknek nulla, egy vagy két rákövetkez je lehet, és csak nulla vagy egy megel z je. A láncolást az IntTree objektumokra vonatkozó referenciákkal oldjuk meg, ezek az adott fabeli csomópont bal és jobb oldali részfáira fognak mutatni. A csomópontokban ezenkívül még egy int értéket is eltárolunk. Ha nincs megel z, akkor a fa gyökerér l beszélünk. A rendez fa a benne tárolt értékeket mélységi bejárás szerint rendezve tárolja. 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 44 / 50

Bináris fa osztály (IntTree.java, IntTreeTest.java) Az IntTree osztálynak a következ m veletei vannak: insert(int data): a data értéket beilleszti a fába. Ha a beszúrandó elem kisebb, mint a fa gyökerében található elem, akkor a bal részfába (rekurzió) illeszti be. Ha nincs még bal részfánk, akkor hozzuk létre ezzel az elemmel a gyökerében. Ha a beszúrandó elem nagyobb, vagy egyenl, mint a gyökérben lev, akkor ugyanezt végezzük el a jobb részfára! contains(int data): eldönti, hogy a paramétereként megadott elem megtalálhatóe a fában. Igaz értéket ad vissza, ha megtalálható az elem, különben hamisat. (rekurzív metódus) konstruktor (IntTree(int[] elements)): az int értékek egy tömbjét beszúrja a fába konstruktor (IntTree(int data)): egy elemb l egy olyan fát hoz létre, amelyben csak egyetlen gyökérelem van (és nincsenek rákövetkez i). 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 45 / 50

Bináris fa osztály (IntTree.java, IntTreeTest.java) toarray(): egy int értékeket tartalmazó tömbben visszaadja azokat az értékeket, amelyeket a fában tárolunk. Ha szeretnénk kihasználni, hogy a beszúrást rendezetten végeztük, akkor érdemes ezt a tömböt úgy felépíteni, hogy el ször a bal részfa elemeit vesszük, aztán a gyökérben lev elemet, majd a jobb részfa elemeit. Az így összeállított tömb is rendezett lesz (inorder bejárás). (rekurzív metódus) tostring(): egy fa szöveges alakját adja meg. (csak a tárolt elemeket jelenítjük meg egy felsorolásban). equalsto(inttree other): eldönti az objektumról és a paraméterként megadott változóról, hogy a kett megegyezike. Két bináris fát akkor tekintünk egyenl nek, ha ugyanazokat az elemeket tartalmazzák. Készítsünk f programot is, amely teszteli ezen m veleteket! 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 46 / 50

Egész értékek dinamikus listája (IntList.java, IntListTest.java) Készítsünk egy utils.intlist osztályt (egész értékek tömbösített, dinamikus tárolására alkalmas osztály). Készítsünk az osztályhoz két konstruktort: egy olyat, amelynek nincs paramétere (a tömb nem tartalmaz semmit), egy másikat, amelyben megadjuk egy egész értékeket tároló tömbben, hogy mit tartalmazzon kezdetben! 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 47 / 50

Egész értékek dinamikus listája (IntList.java, IntListTest.java) Az osztály m veletei: add(int x): egy új elem hozzáadása a tömb végére, add(int index, int x): elem beszúrása az adott index helyre, concat(intlist list): egy másik IntList tartalmának hozzáf zése az aktuálishoz, get(): az els elem lekérdezése, get(int index): adott index elem lekérdezése, set(int index, int x): adott index elem beállítása, amennyiben van olyan index elem, remove(): az els elem törlése, remove(int index): adott index elem törlése, 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 48 / 50

Egész értékek dinamikus listája (IntList.java, IntListTest.java) indexof(int x): elem indexének megkeresése, ha nem található, akkor -1et adjon vissza, size(): a jelenleg tárolt elemek száma, clear(): az összes elem törlése, toarray(): az osztályban tárolt értékek egyetlen tömbként történ visszaadása, tostring(): szöveggé alakítás. 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 49 / 50

Egész értékek dinamikus listája (IntList.java, IntListTest.java) Továbbá legyen egy fromstring(string input) nev osztályszint metódusa, amellyel szövegb l tudjuk beolvasni a tárolni kívánt elemeket. Az értékeket ebben a beolvasni kívánt szöveges reprezentációban egyszer en szóközökkel választjuk el. Feltételezhetjük, hogy a szövegben valóban számok szerepelnek. Készítsünk f programot is, amely teszteli ezen m veleteket! 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 50 / 50