Programozás I. Második ZH segédlet Ezen az oldalon: interfész létrehozás, megvalósítás; absztrakt osztály, metódus; belső osztály Interfész létrehozása: public interface InterfeszNeve { //Metódusok deklarációja (csak deklaráció!) Interfész megvalósítása: public class OszalyNeve implements InterfeszNeve { //Az interfészben deklarált metódusok megvalósítása Absztrakt osztály: (Nem példányosítható!) public abstract class OszalyNeve { //Adattagok //Metódusok deklarációja, megvalósítása //Az interfésszel ellentétben itt lehetnek megvalósított //metódusok is. Absztrakt metódus (Csak absztrakt osztályon belül) A gyerekosztályban meg kell valósítani! public abstract void csinaljvalamit(); Belső osztály (a belső osztály lehet privát, statikus is): public class KulsoOsztaly { //Adattagok private class BelsoOsztaly{ //Adattagok, metódusok private BelsoOsztaly b = new BelsoOsztaly(); //Metódusok
Ezen az oldalon: kivételtípusok, saját kivétel, kivételkezelés, kivétel dobásának jelzése, kivétel dobása; generikus listák létrehozása Kivételtípusok: NumberFormatException IOException ArrayIndexOutOfBoundException Exception Saját kivétel osztály Átalakításkor, például az Integer.parseInt() metódus dobhat ilyen kivételt. I/O műveletéknél dobódhat ilyen kivétel (pl.: fájlból olvasás) tömb alul-, vagy túlindexelésénél előforduló kivétel Általános kivétel Az Exception osztályből kell származtatni! Kivételkezelés try { //A védett blokk, ahol olyan művelet történik //ami kivételt dobhat (pl.: fájlból olvasás) catch(exceptiontype1 et1) { //Az ExceptionType1 típusú kivétel elkapása catch(exceptiontype2 et2){ //Az ExceptionType2 típusú kivétel elkapása catch(exceptiontype3 et3){ //Az ExceptionType3 típusú kivétel elkapása finally { //Mindenképpen lefutó kódrészlet Egy függvény dobhat kivételt: (fejlécében deklaráljuk) public void metodus() throws ExType1, ExType2 { //Kód Kivétel dobása: throw new ExceptionType(); Generikus listák: List<Tipus> intlist1 = new ArrayList<Tipus>(); List<Tipus> intlist2 = new LinkedList<Tipus>();
Ezen az oldalon: Generikus listák bejárása iterátorral, for-each ciklussal, for ciklussal, generikus halmaz létrehozása Lista bejárása iterátorral: Iterator<Tipus> bejarlista = lista.iterator(); while (bejarlista.hasnext()){ Tipus aktualis = bejarlista.next(); Lista bejárása for-each ciklussal: for(tipus valtozo : lista) { //Itt "valtozo" néven hivatkozhatunk az adott elemre Lista bejárása for ciklussal: for(int i=0; i < lista.size(); i++) { Tipus a = lista.get(i); Hozzáadás listához: lista.add(objektum); //A legelső üres indexre kerül be lista.add(index, objektum); //Adott indexre kerül be az //elem Egy adott elem eltávolítása a listából: lista.remove(index); //Adott indexű elemet törli lista.remove(objektum); //Az első megegyező objektumot //törli //Ha a listában több megegyező //objektum van, akkor is csak az elsőt // törli Egy kollekció eltávolítása a listából: (pl.: egy részlista) lista.removeall(masiklista); Egy elem benne van-e a listában: lista.contains(objektum) // true, ha igen Generikus halmaz: Set<Tipus> myset1 = new HashSet<Tipus>(); Set<Tipus> myset2 = new TreeSet<Tipus>();
Ezen az oldalon: hozzáadás halmazhoz, törlés halmazból; halmaz tartalmaz-e egy adott elemet; halmaz bejárása; generikus map, hozzáadás, elem benne van-e Hozzáadás a halmazhoz: halmaz.add(objektum); // Minden elem csak egyszer // szerepelhet benne Egy adott elem eltávolítása a halmazból: halmaz.remove(objektum); Egy kollekció eltávolítása a halmazból: (pl.: egy részhamaz) halmaz.removeall(masikhalmaz); Egy elem benne van-e a halmazban: halmaz.contains(objektum) // true, ha igen Halmaz bejárása iterátorral: Iterator<Tipus> bejarhalmaz = halmaz.iterator(); while (bejarhalmaz.hasnext()){ Tipus aktualis = bejarhalmaz.next(); Generikus map: (kulcs-érték párok halmaza) Map<Tipus1, Tipus2> map = new HashMap<Tipus1, Tipus2>(); Map<Tipus1, Tipus2> map2 = new TreeMap<Tipus1, Tipus2>(); Map-be kulcs-érték behelyezése: map.put(kulcs, érték); Generikus map iterátor Iterator<Map.Entry<KulcsTipus, ErtekTipus>> it = map.entryset().iterator(); Map adott kulcsához tartozó érték: ErtekTipkus v = map.get(kulcs); Egy adott kulcs benne van-e a mapben: map.containskey(kulcstipus) //Igaz, ha tartalmazza. Egy adott érték benne van-e a mapben: map.containsvalue(ertektipus) //Igaz, ha tartalmazza.
Ezen az oldalon: map bejárása iterátorral; beolvasás konzolról, fájlból; fájlbaírás; StringTokenizer Map bejárása iterátorral: for (Iterator<Map.Entry<String, Integer>> it = map.entryset().iterator(); it.hasnext(); ) { Map.Entry<String,Integer> e = it.next(); //Kulcs: String k = e.getkey(); //Érték : int v = e.getvalue(); Beolvasás konzolról: Scanner sc = new Scanner(System.in); int i = sc.nextint(); long l = sc.nextlong(); //egész szám beolvasása double d = sc.nextdouble(); //lebegőpontos beolvasása float f = sc.nextfloat(); //lebegőpontos beolvasása boolean b = sc.nextboolean(); //Boolean beolvasása String str = sc.next(); //String beolvasása String str = sc.nextline(); //Egész sor beolvasása Beolvasás fájlból (soronként): BufferedReader be = new BufferedReader(new FileReader(new File("fajlnev.txt"))); String line = null; while ((line = br.readline())!= null) { //A sorral végzendő művelet (pl.: darabolás) be.close(); Kiíratás fájlba: FileWriter ki = new FileWriter(new File("textfajl.txt")); ki.write("szöveg"); ki.close(); //A megnyitott fájl bezárása String feldarabolás (StringTokenizer): String s = "sor amit tordelni kell"; StringTokenizer st = new StringTokenizer(s); //Beépített //elválasztókarakterek StringTokenizer st2 = new StringTokenizer(s, ";"); //Saját //elválasztókarakterek
Ezen az oldalon: StringTokenizer feldarabolt szöveg bejárása, split, véletlen szám generálás Feldarabolt szöveg bejárása: while(st.hasmoretokens()) { String resz = st.nexttoken(); String feldarabolása a split() segítségével: String szoveg = "elso-masodik-harmadik"; String[] darabok = szoveg.split("-"); String elsoresz = darabok[0]; //elso String masodikresz = darabok[1]; //masodik String harmadikresz = darabok[2]; //harmadik Véletlenszám generálása: Random r = new Random(); int randomint = r.nextint(); int randomint2 = r.nextint(101); // 0-100 között generál // egy véletlenszámot double randomdouble = r.nextdouble(); A segédanyagot készítette: Antal Gábor. A segédanyagban előfordulhatnak esetlegesen hibák, elírások, ha valaki talál, akkor kérem jelezze felém az antal@inf.u-szeged.hu címen. Mindenkinek sok sikert kívánok a zh-hoz.