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

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

Programozási nyelvek Java

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

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

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

Osztályok. 4. gyakorlat

Készítette: Nagy Tibor István

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

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

Java és web programozás

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

Java II. I A Java programozási nyelv alapelemei

1. Jelölje meg az összes igaz állítást a következők közül!

Programozás I gyakorlat

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

OOP #14 (referencia-elv)

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

Programozási nyelvek Java

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

Java II. I A Java programozási nyelv alapelemei

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

Java programozási nyelv

Java és web programozás

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

JAVA PROGRAMOZÁS 2.ELŐADÁS

Programozás I. Első ZH segédlet

OOP: Java 1.Gy: Java alapok

Programozási nyelvek II.: JAVA

Programozási nyelvek Java

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

Programozási nyelvek II.: JAVA

Informatika terméktervezőknek

10. gyakorlat Struktúrák, uniók, típusdefiníciók

Programozás I gyakorlat

A C# programozási nyelv alapjai

C programozási nyelv Pointerek, tömbök, pointer aritmetika

3. Gyakorlat Ismerkedés a Java nyelvvel

Programozás I. Gyakorlás egydimenziós tömbökkel Többdimenziós tömbök Gyakorló feladatok V 1.0 ÓE-NIK-AII,

C++ programozási nyelv Konstruktorok-destruktorok

Programozási nyelvek II.: JAVA

BME MOGI Gépészeti informatika 5.

7. fejezet: Mutatók és tömbök

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

3. Osztályok II. Programozás II

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Tömbök, kollekciók és egyéb alaposztályok

Smalltalk 2. Készítette: Szabó Éva

8. gyakorlat Pointerek, dinamikus memóriakezelés

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

Programozás alapjai. 5. előadás

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

4. Gy: JAVA osztályok

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

és az instanceof operátor

Szövegek C++ -ban, a string osztály

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

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

Apple Swift kurzus 3. gyakorlat

Programozás I gyakorlat

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

Programozási nyelvek Java

Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

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?

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

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

Java és web programozás

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

Szoftvertechnológia alapjai Java előadások

Adatszerkezetek Adatszerkezet fogalma. Az értékhalmaz struktúrája

C++ programozási nyelv

Programozási nyelvek II.: JAVA

BME MOGI Gépészeti informatika 8.

Web-technológia PHP-vel

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

OOP I. Egyszerő algoritmusok és leírásuk. Készítette: Dr. Kotsis Domokos

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

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

Pénzügyi algoritmusok

Kalapácsvetés 2016 szöveges

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

Objektumorientált Programozás IV.

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

BME MOGI Gépészeti informatika 4.

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

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

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

A C# PROGRAMOZÁSI NYELV

Objektum Orientált Programozás IV.

Adatszerkezetek és algoritmusok

Magas szintű programozási nyelvek 2 Előadás jegyzet

Objektumok inicializálása

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

Maximum kiválasztás tömbben

Programozás I gyakorlat

Java Programozás 1. Gy: Java alapok. Ismétlés ++

Felhasználó által definiált adattípus

C# gyorstalpaló. Készítette: Major Péter

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

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

Átírás:

Programozási nyelvek II.: JAVA, 4. gyakorlat 2017. október 2-6. Programozási nyelvek II.: JAVA, 4. gyakorlat 1 / 29

A 4. gyakorlat tematikája Tömbök A java.util.arrays osztály A String osztály StringBuilder osztály Programozási nyelvek II.: JAVA, 4. gyakorlat 2 / 29

Tömbök Sok azonos típusú érték tárolására Hatékony elérés: indexelés minden tömbelem egyenl méret helyet foglal el a tömb elemei folytonosan helyezkednek el a memóriában, az elemek helyének kiszámítása ugyanazzal a formulával, pl. egydimenziós tömb esetén: t[i] = t + i * sizeof(t), ahol a t a tömb, az [i] az indexel operátor, amelyben i az elérend elem indexe, a sizeof() operátor egy típus értékeinek méretét adja meg byte-ban, a T pedig a tömb elemeinek típusa a tömb nevének hivatkozása a tömb kezd címét adja meg a memóriában a tömböket 0tól indexelik, hossz1ig hibás index megadása: ArrayIndexOutOfBoundsException kivétel Id igényes a beszúrás és a törlés Programozási nyelvek II.: JAVA, 4. gyakorlat 3 / 29

Tömb létrehozása Minden T típushoz hozzárendelhet egy T[] típus, amely a T elemekb l képzett tömböt jelenti Tömb típusú változó deníciójára példák: int[] intarray; char[] chararray; String[] stringarray; A változó deklarációja nem hozza létre a tömböt A tömböket az objektumokhoz hasonló módon példányosítani kell, pl. int[] t = new int[10]; int t[] = new int[10]; (a hossz megadása a tömb létrehozásakor, a hosszt megváltoztatni nem lehet) A példányosítás elmulasztásával: NullPointerException kivétel, pl.: int[] s; int x = s[0]; Hibás! Programozási nyelvek II.: JAVA, 4. gyakorlat 4 / 29

Tömbök inicializálása boolean[] barr1 = { true, false ; boolean[] barr2 = new boolean[] { true, false ; boolean[] barr3 = new boolean[2]; barr3[0] = true; barr3[1] = false; Programozási nyelvek II.: JAVA, 4. gyakorlat 5 / 29

Többdimenziós tömbök tömbök tömbje: nincs "igazi" kétdimenziós tömb, csak olyan egydimenziós tömb, amelynek az elemei is tömbök deklaráció: int[][] mx; inicializálásnál az els dimenziót meg kell adni, vagyis int[][] mx = new int[5][]; szabálytalan alakú tömbök is létrehozhatók: int mdt[][]; mdt = new int[2][]; mdt[0] = new int[2]; mdt[0][0] = 7; mdt[0][1] = 2; mdt[1] = new int[3]; mdt[1][0] = 2; mdt[1][1] = 4; mdt[1][3] = 0; Programozási nyelvek II.: JAVA, 4. gyakorlat 6 / 29

A java.util.arrays osztály a tömbökhöz tartozó segédosztály, számos, a tömbökkel kapcsolatos m veletet meg található benne fontosabb metódusok: binarysearch: bináris keresés copyof: tömb másolása copyofrange: tömb egy részének másolása equals: tömbök összehasonlítása (== operátor csak referencia-egyenl séget vizsgál) fill: tömb feltöltése egy adott értékkel sort: tömb rendezése tostring: tömb szöveggé alakítása a pontos paraméterezéshez nézd meg a dokumentációt Programozási nyelvek II.: JAVA, 4. gyakorlat 7 / 29

For ciklus tömbökre enhanced for loop class EnhancedForDemo { public static void main ( String [] args ) { int [] numbers = {1,2,3,4,5,6,7,8,9,10; for ( int item : numbers ) { System. out. println (" Az elem erteke : " + item ); Programozási nyelvek II.: JAVA, 4. gyakorlat 8 / 29

Aliasing több referencián keresztül hivatkozunk ugyanarra az objektumra Rectangle box1 = new Rectangle (0, 0, 100, 200); Rectangle box2 = box1 ; tömbök esetében problémát okozhat, pl. tömbök megfordításánál void reverse ( int [] src, int [] dst ){ for ( int i =0, j= src. length -1; i < src. length ; ++i, --j ){ dst [j] = src [i ]; int [] t = {1,2,3,4,5; reverse (t, t ); // nem a vart eredmenyt adja Programozási nyelvek II.: JAVA, 4. gyakorlat 9 / 29

Aliasing egy megoldás void reverse ( int [] src, int [] dst ){ assert src!= null ; assert dst!= null ; assert src. length == dst. length ; assert src!= dst ; // ezt is kossuk ki, hogy jol mukodjon for ( int i =0, j= src. length -1; i < src. length ; ++i, --j ){ dst [j] = src [i ]; Programozási nyelvek II.: JAVA, 4. gyakorlat 10 / 29

Kiszivárogtatás public class Point { private final int x, y; public Point ( int x, int y ){ this.x = x; this.y = y; public int getx (){ return x; public int gety (){ return y; Programozási nyelvek II.: JAVA, 4. gyakorlat 11 / 29

Kiszivárogtatás public class Point { private final int [] coords ; public Point ( int x, int y ){ coords = new int []{ x, y ; public int getx (){ return coords [0]; public int gety (){ return coords [1]; public int [] coords (){ return coords ; Point p = new Point (1,1); int [] c = p. coords (); Programozási nyelvek II.: JAVA, 4. gyakorlat 12 / 29

Kiszivárogtatás a coords() metódus engedi kiszökni a Point bels állapotát amin keresztül direkt manipulálható kívülr l a bels állapot sérti az OOP elveket (private) Programozási nyelvek II.: JAVA, 4. gyakorlat 13 / 29

Kiszivárogtatás egy megoldás public class Point { private final int [] coords ; public Point ( int x, int y ){ coords = new int []{ x, y ; public int getx (){ return coords [0]; public int gety (){ return coords [1]; public int [] coords () { return new int []{ coords [0], coords [1]; // masolatot adunk vissza Programozási nyelvek II.: JAVA, 4. gyakorlat 14 / 29

A String osztály Unicode karakterek sorozata pl. String s = "Szia!"; String s = new String("Szia!"); Egy String objektum tartalmát nem lehet módosítani, helyette új stringet kell létrehozni. pl. s = "Szia?"; s = new String("Szia?"); M veletei: length, charat, compareto, concat, endswith, replace, substring, trim, valueof, indexof, equalsignorecase, tolowercase,... a String osztály immutable: semelyik metódusa sem tudja megváltoztatni az String objektum értékét (pl. a replace metódus [ami egy szövegrészletet egy másikra cserél] SEM változtatja meg a String objektum értékét, hanem visszaad egy ÚJ String objektumot, ami már a cserélt változatot tartalmazza) Programozási nyelvek II.: JAVA, 4. gyakorlat 15 / 29

A StringBuilder osztály Unicode karakterek sorozata A tartalmuk megváltoztatható anélkül, hogy új objektumot hozunk létre M veletei: append, insert, reverse, setcharat, setlength,... ha tudhatóan sok vagy hosszú, illetve ha ismeretlen darabszámú String-eket konkatenálunk össze, azokat hatékonysági okokból StringBuilder-rel kell összekapcsolni Programozási nyelvek II.: JAVA, 4. gyakorlat 16 / 29

Feladat: Több-dimenziós tömb sorainak kiiratása Készíts egy IntegerMatrix nev osztályt a következ metódusokkal. Egy konstruktor, mely 3 paramétert vár: int rownum A mátrix sorainak száma. int colnum A mátrix oszlopainak száma. int[] lineardata Egy, a mátrix elemeit sorfolytonosan tároló tömb. Egy objektumszint tostring metódus, mely egyetlen karakterláncba felsorolja a mátrix elemeit. A karakterláncban az egy sorban szerepl elemeket a, karakterrel válaszd el! A sorokat a ; karakterrel válaszd el! Például lineardata = {1,2,3,4,5,6 esetén az IntegerMatrix(2,3,linearData) konstruktorhívás hatására a következ mátrix készül: [ ] 1 2 3 4 5 6 Ez esetben objektum tostring metódusa a következ karakterlánccal tér vissza: "1,2,3;4,5,6". Programozási nyelvek II.: JAVA, 4. gyakorlat 17 / 29

Feladat: Több-dimenziós tömb sorainak kiiratása public class IntegerMatrixTest { public static void main ( String [] args ){ int [] lineardata = {1, 2, 3, 4, 5, 6; System. out. println ( new IntegerMatrix (2, 3, lineardata )); Programozási nyelvek II.: JAVA, 4. gyakorlat 18 / 29

Feladat: Több-dimenziós tömb sorainak kiiratása public class IntegerMatrix { private int rownum ; private int colnum ; private int [][] data ; public IntegerMatrix ( int rownum, int colnum, int [] lineardata ){ this. rownum = rownum ; this. colnum = colnum ; data = new int [ rownum ][ colnum ]; for ( int i = 0; i < lineardata. length ; i ++) { int row = ( int ) Math. floor (i / colnum ); int col = i % colnum ; data [ row ][ col ] = lineardata [i ]; [...] Programozási nyelvek II.: JAVA, 4. gyakorlat 19 / 29

Feladat: Több-dimenziós tömb sorainak kiiratása A tostring metódus. Probléma A szeparátor (, vagy ;) az elemek közé kell, hogy kerüljön. Ötlet Ez ugyanaz, mintha az els elem kivételével minden elem elé tennénk szeparátort. Dolgozzuk fel külön az els elemet. Probléma Különböz szeparátort kell írnunk a sorok és az elemek közé. Ötlet Használjunk beágyazott ciklusokat! A ciklustörzsben mindig a sorok és elemek elé konkatenáljuk a megfelel szeparátort (kivéve az els sort és a sorok els elemeit). Ötlet Kezdetben a szeparátor legyen az üres szó. Az els sor vagy elem kiértékelése után írjuk felül a megfelel szeparátorral. (Az értékadás hatékonyabb, mint a feltétel-kiértékelés.) Programozási nyelvek II.: JAVA, 4. gyakorlat 20 / 29

Feladat: Több-dimenziós tömb sorainak kiiratása public class IntegerMatrix { [...] public String tostring (){ String s="", rowdelim ="", coldelim =""; for ( int [] row : data ){ s += rowdelim ; rowdelim = ";"; for ( int elem : row ){ s += coldelim ; coldelim = ","; s += elem ; coldelim = ""; return s; Programozási nyelvek II.: JAVA, 4. gyakorlat 21 / 29

Feladat: Több-dimenziós tömb sorainak kiiratása A tostring metódus. Probléma A String immutábilis. Konkatenáláskor (+) a operandusok lemásolásával új String készül, melynek hossza az operandusok hosszának összege. A ciklusban való konkatenálások költsége így O(n 2 ). Két egymásba ágyazott ciklus esetén már O(n 3 ). Ötlet Használjuk a java.lang.stringbuilder osztályt! Ennek append metódusát a hatékony konkatenálásra vezették be. https://docs.oracle.com/javase/8/docs/api/java/ lang/stringbuilder.html Programozási nyelvek II.: JAVA, 4. gyakorlat 22 / 29

Feladat: Több-dimenziós tömb sorainak kiiratása public class IntegerMatrix { [...] public String tostring (){ StringBuilder sb = new StringBuilder (); String rowdelim ="", coldelim =""; for ( int [] row : data ){ sb. append ( rowdelim ); rowdelim = ";"; for ( int elem : row ){ sb. append ( coldelim ); coldelim = ","; sb. append ( elem ); coldelim = ""; return sb. tostring (); Programozási nyelvek II.: JAVA, 4. gyakorlat 23 / 29

Programozási nyelvek II.: JAVA, 4. gyakorlat 24 / 29

Hibajavítás (IntVector.java, IntVectorDemo.java) Javítsuk ki a HIBÁS programo(ka)t! Készítsünk a util csomagon belül egy IntVector osztályt, amely egészek sorozatát ábrázolja! Legyen egy tömb adattagja, amely a sorozatot tárolja. Adjunk az osztályhoz egy konstruktort, amely egy egészekb l álló tömböt vár paraméterül! (Segítség: ügyeljünk, hogy a bels állapotot ne szivárogtassuk ki!) Vegyünk fel egy add() metódust, mely a sorozat minden eleméhez hozzáad egy paraméterül kapott egész számot! Készítsünk egy tostring() metódust is, mely felsorolja a számokat szóközzel elválasztva. Például: [1 2 3] Programozási nyelvek II.: JAVA, 4. gyakorlat 25 / 29

Vektor osztály (Vector.java, VectorTest.java) Készítsünk egy utils.vector osztályt (valós számokat tartalmazó tömb mint vektor segítségével), amelynek a következ m veletei vannak: két vektor skaláris szorzatának, összegének, különbségének, a vektor euklideszi normájának, vektor skalárral való szorzatának kiszámítása, valamint a vektor sztringként történ ábrázolása (java.lang.stringbuildert használjunk a szöveg el állításához). Készítsünk f programot is, amely teszteli ezen m veleteket! Programozási nyelvek II.: JAVA, 4. gyakorlat 26 / 29

Vektor osztály (VectorAL.java, VectorTestAL.java, VectorLL.java, VectorTestLL.java) Készítsük el az el bbi osztálynak azon változatát, amelyben a vektort valós számokat tartalmazó tömbös lista (java.util.arraylist), láncolt lista (java.util.linkedlist) segítségével valósítja meg! Programozási nyelvek II.: JAVA, 4. gyakorlat 27 / 29

Számológép osztály (CalculatorVector.java, CalculatorVectorAL.java, CalculatorVectorLL.java) Készítsünk számológépet és tegyük képessé vektorokon végezhet m veletek elvégzésére! A program három parancssori paramétert vár: az els és a második paraméterben számok vannak vessz vel elválasztva, a harmadik paraméter pedig egy szám (pl. java CalculatorVector 2.0,3.0,4.0 3.4,5.6,1.2 2.0). Ellen rizzük, hogy megfelel számú paramétert kaptunke! Ha igen, akkor feltehetjük, hogy a paraméterek valóban számok. Programozási nyelvek II.: JAVA, 4. gyakorlat 28 / 29

Mátrix osztály (Vector.java, Matrix.java, MatrixTest.java) Készítsünk egy basics.matrix osztályt (valós számokat tartalmazó kétdimenziós tömb mint mátrix segítségével), amelynek a következ m veletei vannak: N N dimenziós egységmátrix létrehozása, M N dimenziós véletlen mátrix létrehozása, mátrix transzponáltjának, két mátrix szorzatának, összegének, különbségének kiszámítása, mátrixvektor szorzás (ehhez használjuk a létrehozott vektor osztályt), valamint a mátrix sztringként történ ábrázolása (java.lang.stringbuildert használjunk a szöveg el állításához). Készítsünk f programot (MatrixTest.java, amelyet rakjunk a main csomagba) is, amely teszteli ezen m veleteket! Programozási nyelvek II.: JAVA, 4. gyakorlat 29 / 29