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

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

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

Programozási nyelvek Java

Készítette: Nagy Tibor István

Osztályok. 4. gyakorlat

Java II. I A Java programozási nyelv alapelemei

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

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

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

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

OOP #14 (referencia-elv)

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

3. Gyakorlat Ismerkedés a Java nyelvvel

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

Java programozási nyelv

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

Java II. I A Java programozási nyelv alapelemei

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

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

JAVA PROGRAMOZÁS 2.ELŐADÁS

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

A C# programozási nyelv alapjai

8. gyakorlat Pointerek, dinamikus memóriakezelés

Programozási nyelvek Java

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

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

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

Informatika terméktervezőknek

OOP: Java 1.Gy: Java alapok

BME MOGI Gépészeti informatika 5.

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

Programozási nyelvek II.: JAVA

Java és web programozás

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

Programozás I. Első ZH segédlet

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

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

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

Programozási nyelvek Java

C++ programozási nyelv Konstruktorok-destruktorok

4. Gy: JAVA osztályok

Programozási nyelvek II.: JAVA

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

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

Java és web programozás

Szoftvertechnológia alapjai Java előadások

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

és az instanceof operátor

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

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?

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

3. Osztályok II. Programozás II

Programozási nyelvek II.: JAVA

Programozási nyelvek Java

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

BME MOGI Gépészeti informatika 8.

Programozási nyelvek II.: JAVA

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

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

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

Programozás I gyakorlat

Web-technológia PHP-vel

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

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

Java és web programozás

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

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

Programozás Minta programterv a 1. házi feladathoz 1.

Objektumok inicializálása

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

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

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

Segédanyag: Java alkalmazások gyakorlat

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

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

Programozás I gyakorlat

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

Maximum kiválasztás tömbben

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

Szoftvertechnolo gia gyakorlat

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

C++ programozási nyelv

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

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter

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

Objektum Orientált Programozás V.

Kalapácsvetés 2016 szöveges

Objektumorientált Programozás V.

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

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

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

Java tutorial. Object. Nehany alaposztaly, amit ismerni illik. tostring. equals vs. ==

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

C# osztályok. Krizsán Zoltán

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

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

Pénzügyi algoritmusok

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

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

Átírás:

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

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

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 0 tól indexelik, hossz 1 ig 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 / 32

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ó definíciója int[] intarray;, char[] chararray;, String[] stringarray;, vagy 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 / 32

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 / 32

Többdimenziós tömbök tömbök tömbje 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: 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 / 32

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 lehet találni a java.util.arrays osztályban (pl. a szöveggé alakításának (tostring()), bináris keresésnek (binarysearch()), vagy a tömb feltöltésének (fill()) műveletét) tömbök összehasonlítása: equals, nem pedig az == operátorral Programozási nyelvek II.: JAVA, 4. gyakorlat 7 / 32

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 / 32

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ömbok 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; int [] t = new int [5]{1,2,3,4,5; reverse (t,t) Programozási nyelvek II.: JAVA, 4. gyakorlat 9 / 32

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 / 32

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 / 32

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 / 32

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 / 32

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 / 32

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,... Programozási nyelvek II.: JAVA, 4. gyakorlat 15 / 32

A StringBuffer és 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,... Programozási nyelvek II.: JAVA, 4. gyakorlat 16 / 32

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. Integer[] 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 / 32

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

Feladat: Több-dimenziós tömb sorainak kiiratása public class IntegerMatrix { private int rownum ; private int colnum ; private Integer [][] data ; public IntegerMatrix ( int rownum, int colnum, Integer [] lineardata ){ this. rownum = rownum ; this. colnum = colnum ; data = new Integer [ 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 / 32

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). Programozási nyelvek II.: JAVA, 4. gyakorlat 20 / 32

Feladat: Több-dimenziós tömb sorainak kiiratása public class IntegerMatrix { [...] public String tostring (){ String s = ""; if( data. length < 1) return s; s += data [0]. length < 1? "" : data [0][0]; for ( int j =1; j< data [0]. length ; j ++) s += "," + data [0][ j]; for ( int i =1; i< data. length ; i ++){ s += ";"; s += data [i]. length < 1? "" : data [i ][0]; for ( int j =1; j< data [i]. length ; j ++) s += "," + data [i][j]; return s; Programozási nyelvek II.: JAVA, 4. gyakorlat 21 / 32

Feladat: Több-dimenziós tömb sorainak kiiratása A tostring metódus. Probléma Nehezen olvasható, ráadásul a feltétel-kiértékelések nem hatékonyak. Ö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 22 / 32

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

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 24 / 32

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

Java Platform SE 8 API http://docs.oracle.com/javase/8/docs/api/ Programozási nyelvek II.: JAVA, 4. gyakorlat 26 / 32

Programozási nyelvek II.: JAVA, 4. gyakorlat 27 / 32

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 28 / 32

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.stringbuilder t 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 29 / 32

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 30 / 32

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 kaptunk e! Ha igen, akkor feltehetjük, hogy a paraméterek valóban számok. Programozási nyelvek II.: JAVA, 4. gyakorlat 31 / 32

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átrix vektor 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.stringbuilder t 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 32 / 32