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

Hasonló dokumentumok
Reader /Writer InputStreamReader, OutputStreamWriter

Programozás I. Második ZH segédlet

Programozás I. Második ZH segédlet

Java programozási nyelv 10. rész Input/output kezelés

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

Java és web programozás

Programozási technológia

Dinamikus adatszerkezetek. 2D generikus tömb: C++ 2D generikus tömb: C++

Dinamikus adatszerkezetek. 2D generikus tömb: C++ 2D generikus tömb: C++ 2D tömb: Java versus C++ 2D tömb: Java.

Programozási nyelvek Java

Generikus osztályok, gyűjtemények és algoritmusok

Collections. Összetett adatstruktúrák

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

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

JAVA SE/ME tanfolyam tematika

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

Abstract osztályok és interface-ek. 7-dik gyakorlat

Java programozási nyelv

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

Programozási nyelvek Java

Fejlett programozási nyelvek C++ Iterátorok

Segédanyag: Java alkalmazások gyakorlat

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában

Java gyakorlat feladatai e s megolda sai ( )

Java és web programozás

Python tanfolyam Python bevezető I. rész

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

Elemi adatszerkezetek

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

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

Programozási nyelvek II.: JAVA

ELTE SAP Excellence Center Oktatóanyag 1

Programozási nyelvek Python

Programozási nyelvek Java

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

JAVA ALKALMAZÁSOK 5. ELŐADÁS 1/9/2017 1

Adatszerkezetek 2. Dr. Iványi Péter

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

.Net adatstruktúrák. Készítette: Major Péter

Programozási technológia

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

Imperatív programozás

2018, Funkcionális programozás

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

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

Java osztálykönyvtár és használata

Generikus Típusok, Kollekciók

Adatszerkezetek és algoritmusok

Ugrólisták. RSL Insert Example. insert(22) with 3 flips. Runtime?

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

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

TCP/IP kapcsolat Java nyelven

PowerShell v2.0 alapok. Nagy Miklós

Programozási nyelvek Java

A C programozási nyelv VI. Parancssori argumentumok File kezelés

Adattípusok, vezérlési szerkezetek. Informatika Szabó Adrienn szeptember 14.

Tartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I.

2018, Funkcionális programozás

Operációs rendszerek. UNIX fájlrendszer

Ismerkedés a Python programnyelvvel. és annak micropython változatával

Programozás alapjai 6. előadás. Wagner György Általános Informatikai Tanszék

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

Keresés és rendezés. A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán

Bevezetés a programozásba I 4. gyakorlat. PLanG: Szekvenciális fájlkezelés

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Programozási nyelvek Java

Programozás III CSOMAGOK. Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek.

1. Egyszerű (primitív) típusok. 2. Referencia típusok

Java Programozás 6. Gy: Java alapok. Adatkezelő 2.rész

Programozás alapjai II. (7. ea) C++ Speciális adatszerkezetek. Tömbök. Kiegészítő anyag: speciális adatszerkezetek

Speciális adatszerkezetek. Programozás alapjai II. (8. ea) C++ Tömbök. Tömbök/2. N dimenziós tömb. Nagyméretű ritka tömbök

C++ programozási nyelv

Bevezetés a programozásba I 4. gyakorlat. PLanG: Szekvenciális fájlkezelés. Szekvenciális fájlkezelés Fájlok használata

Programozás alapjai II. (7. ea) C++

Programozási nyelvek Java

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

Adatszerkezetek 7a. Dr. IványiPéter

Láncolt listák. Egyszerű, rendezett és speciális láncolt listák. Programozás II. előadás. Szénási Sándor

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

Tuesday, March 6, 12. Hasító táblázatok

7. gyakorlat Sorozatok, Fájlkezelés

Tartalomjegyzék. Köszönetnyilvánítás. 1. Az alapok 1

Java II. I A Java programozási nyelv alapelemei

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

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

Programozási segédlet

Programozási nyelvek II. JAVA

Adatszerkezetek 1. Dr. Iványi Péter

Bevezetés a Programozásba II 12. előadás. Adatszerkezetek alkalmazása (Standard Template Library)

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 PROGRAMOZÁS 8.ELŐADÁS

BASH script programozás II. Vezérlési szerkezetek

Programozási nyelvek II.: JAVA

2018, Funkcionális programozás

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.

end function Az A vektorban elõforduló legnagyobb és legkisebb értékek indexeinek különbségét.. (1.5 pont) Ha üres a vektor, akkor 0-t..

Informatika terméktervezőknek

Bevezetés Kiíratás Beolvasás Formázás Fájlkezelés Gyakorló feladatok C++ I/O. Bevezetés. Izsó Tamás február 20. Izsó Tamás C++ I/O / 1

Programozás I. Első ZH segédlet

Láncolt listák. PPT 2007/2008 tavasz.

Átírás:

Programozás I. 8. gyakorlat 1

StringTokenizer osztály Stringeket darabolhatunk fel vele részekre Alapértelmezetten 5 esetben darabol: Szóköz Tab Újsor karakter Carriage return (kocsi vissza) karakter Line feed http://docs.oracle.com/javase/7/docs/api/java/util/stringtokenizer.html Példaprogram: StringTokenizerPelda.java CollectionAndIO.java 2

StringTokenizer osztály Létrehozás: String s = sor amit tordelni kell ; StringTokenizer st = new StringTokenizer(s); Egyéni karakter mentén történő darabolás: st = new StringTokenizer(s, ; ); Bejárás while ciklussal a legegyszerűbb: while(st.hasmoreelements()) { String resz = st.nextelement().tostring(); } 3

Standard IO Standard input: System.in Standard output: System.out System.out.println( Szöveg ); Standard error: System.err System.err.println( Szöveg ); System.out és a System.err közvetlenül használhatóak 4

Fájlkezelés, IO Adatfolyam alapú megközelítés (amíg van adat olvassuk/amíg van adat írunk, adatfolyam bezárása) InputStream/OutputStream: byte-orientált IO - 8 bites karakter InputStream: adatforrás-folyam OutputStream: adatnyelő-folyam Reader/Writer osztályok: karakter-orientált IO (unicode támogatással) - 16 bites karakter Konvertáló osztályok (pl.: InputStreamReader) 5

Importálás IO-hoz A java.io csomag tartalmazza az íráshoz/olvasáshoz szükséges osztályokat import java.io.*; Amiket használunk belőle: (API) BufferedReader InputStreamReader FileReader FileWriter Bővebben: http://docs.oracle.com/javase/8/docs/api/java/io/package-summary.html 6

Beolvasás fájlból Scannert is használhatunk (múlt óra) BufferedReader FileReader: karakteres fájlokat olvas konstruktorában egy File objektumot vár File f = new File( fajlnev.txt ); readline() - egy sort olvas be a fájlból BufferedReader be = new BufferedReader(new FileReader(new File("fajlnev.txt"))); String beolvas = be.readline(); 7

Kiíratás fájlba FileWriter: karakteres fájlokat ír, egy fájl objektumot/útvonalat (String) vár, ahová ír megadhatjuk, hogy csak hozzáfűzzön a jelenlegi fájlhoz FileWriter ki = new FileWriter(new File( textfajl.txt )); ki.write( szöveg ); Példaprogram: Fajlkezeles.java 8

Puffer kezelése Writer ki = new FileWriter(new File("uj.txt")); ki.write("szöveg, valami blabal"); ki.flush(); ki.write("másvalami szöveg, valami blabal"); ki.close(); flush() metódus: Ürítjük a puffert, azaz, amit eddig átadtunk neki, az biztosan kiíródik a fájlba lassú művelet 9

Puffer kezelése a close() által mindenképpen meghívásra kerül a puffert kiürítő függvény Ha nem szükséges azonnali, adott időbeni kiírás, akkor nem szükséges flush()-t használnunk, hiszen a close() meghívásakor minden kiíródik ennek feltétele viszont, hogy a close()-t használni kell a flush() nem zár le, csak puffert ürít, így a close()-ra mindenképpen szükség van! 10

Megjegyzések Új File objektum létrehozásakor \ helyett \\- t kell használni Windows esetén Kiírásnál sortörés \n helyett operációs rendszer specifikusan: String s = System.lineSeparator(); IO műveletek végén a streameket le kell zárni minden esetben a close() metódus segítségével Példaprogram: Fajlkezeles.java 11

Ismétlés - tömbök Tömbök előnyei? Hátrányai? Használatuk? Adott tömbelem elérése? 12

Kollekciók objektumokat tartalmaznak Előnyei: a tömbbel szemben itt nincs meghatározott méretük, bármennyi objektumot pakolhatunk bele hatékonyabb fejlesztés (gyorsabb is) kész, hatékony kereső, rendező algoritmusok Fajtái: Collection: Set, List, Queue Map: SortedMap 13

List Listák (konkrét megvalósítások) - Egy elem többször is szerepelhet benne ArrayList: tömbbel megvalósított lista elemek elérése gyors (konstans idő) beszúrás lassú LinkedList: láncolt lista (múlt óra) (minden csomóponthoz tartozik egy mutató előre és hátra, valamint az érték) elérése lassabb beszúrás gyorsabb mint az ArrayList-nél 14

Set Egy elem nem szerepel benne többször (hiába tesszük bele többször) HashSet hash táblában tárol keresés gyors TreeSet fastruktúrában tárol mindig(!) rendezett a halmaz 15

16

Map Kulcs-érték párok (kulcsokat párosít értékekkel) A kulcsokra gyors keresés biztosított Kulcs nem ismétlődhet, de érték igen! Fajtái HashMap: bejáráskor véletlenszerű sorrend TreeMap: bejáráskor meghatározott sorrend piros-fekete fa 17

Nem generikus kollekciók Bármilyen típust tárolhatunk bennük Nem szerencsés, csak azonos típusúakat tárolni benne A kollekciók objektumokat tárolnak,nem kell < > közé kiírni Minden esetben Object típusú objektumot kapunk vissza Ezt downcastolni kell, ami veszélyes művelet 18

Generikus kollekciók Java 1.5-től létezik (Jelenleg Java 1.8) Lényege, hogy egy kollekcióban csak adott típusú elemeket tároljunk Korábban csak célszerű volt azonos típusú objektumokat tárolni egy kollekcióban, de így kötelező meghatározzuk, hogy milyen objektumokat tárolunk benne rengeteg hibalehetőségtől kíméljük meg magunkat manapság soha nem használunk NEM generikus kollekciókat Fent emíltett okok miatt 19

Kollekció kezelése Kollekció létrehozása az ArrayList példáján (de a többi is hasonló): List<Integer> lista = new ArrayList<Integer>(); lista.add(new Integer(3)); lista.add(4); // Wrapper objektum képződik! Kollekcióba csak objektumot tehetünk! 20

Kollekció kezelése Hozzáadás kollekcióhoz: lista.add(objektum); lista.add(index, objektum); ha nem adunk meg indexet, akkor értelemszerűen a következő üres helyre teszi! Törlés: lista.remove(objektum); lista.remove(index); Kollekció mérete: lista.size(); Kollekció kiürítése: lista.clear(); 21

Kollekció kezelése Elemek lekérése: lista.get(index); A megfelelő típusú, adott helyen lévő objektumot adja vissza List<Kutya> lista = new ArrayList<Kutya>(); Kutya kutyus = new Kutya(); lista.add(1, kutyus); Kutya elsokutya = lista.get(1); 22

Kollekció kezelése A kollekció tartalmaz-e egy adott objektumot: lista.contains(objektum) - igazzal tér vissza, ha benne van az elem a kollekcióban Üres-e egy adott kollekció: lista.isempty() - igazzal tér vissza, ha üres (létezik a kollekció, de nincs benne elem!) 23

Kollekció kezelése Lista bejárása for ciklussal: hagyományos módon: for(int i = 0; i < lista.size(); i++) { Kutya kutyus = lista.get(i); kutyus.ugat(); } for-each ciklussal: for ( Kutya kutyuli : lista ) { kutyuli.ugat(); } 24

Bejárás iterátorral Igazán hatékony bejárást biztosít Előnyei: sokkal gyorsabb, mint a mezei ciklus használata nem kell ismernünk a bejárt dolgok belső szerkezetét használatával csak ellenőrzött módon módosítható a kollekció (remove() metódus) 25

Bejárás iterátorral Az előző lista példáján hozzunk létre egy iterátort Iterator<Kutya> it = lista.iterator(); it.hasnext() : megmondja, hogy van-e következő elem it.next() : a következő elemet adja vissza Példaprogram: Kollekciok.java, Kollekciok2.java 26

Map-ek kezelése A példában HashMap van, de minden Map-re hasonló A < > között meg kell adni először a kulcs típusát, majd az érték típusát Map<String, Integer> map = new HashMap<>(); Hozzáadás: map.put(kulcs, érték); a kulcshoz és az értékhez is egy-egy objektumot vár (van autoboxing) több azonos kulcs nem lehet! (de érték igen) 27

Map-ek kezelése Egy adott kulcshoz tartozó érték: map.get(kulcs) - egy adott típusú objektummal tér vissza Egy adott kulcsot tartalmaz-e map.containskey(kulcs) - igaz, ha tartalmazza a Map az adott kulcsot Egy adott értéket tartalmaz-e: map.containsvalue(kulcs) - igaz, ha tartalmazza a Map az adott kulcsot 28

Map-ek kezelése Adott map méretének lekérdezése: map.size(); Adott map üres-e map.isempty() - igaz, ha a Map üres (de ettől még létezik, csak nincs benne elem!) Adott map kiürítése: map.clear(); 29

Bejárás iterátorral Közvetlenül Map-et nem lehet bejárni iterátorral, ezért át kell alakítanunk halmazzá, amely Entryket tartalmaz, adott kulcs-érték típusból Set<Entry<String, Integer>> mset = map.entryset(); Ezek után létrehozhatunk ennek a halmaznak egy iterátort: Iterator<Entry<String, Integer>> iter = mset.iterator(); Iterator<Entry<String, Integer>> itermas = map.entryset().iterator(); az iter.next() egy Map.Entry típusú objektumot ad Példaprogram: Mapek.java 30

Egymásba ágyazhatóság A Map-eket, illetve a kollekciókat egymásba is ágyazhatjuk, néhány példa: HashMap<String, ArrayList> m = new HashMap<String, ArrayList>(); HashMap<String, ArrayList<String>> m = new HashMap<String, ArrayList<String>>(); Példaprogram: CollectionsAndIOGenerics.java GenerikusKollekciok.java 31