Segédanyag: Java alkalmazások gyakorlat

Hasonló dokumentumok
Programozási nyelvek II.: JAVA

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

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

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?

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

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

Programozási nyelvek Java

Java programozási nyelv

Programozási nyelvek Java

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

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

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

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

Programozás I. Első ZH segédlet

Osztályok. 4. gyakorlat

Programozási nyelvek II.: JAVA

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

és az instanceof operátor

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

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

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

JAVA PROGRAMOZÁS 3.ELŐADÁS

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

OOP: Java 4.Gy: Java osztályok

Kivételkezelés, naplózás. Exception handling, logging

Programozási nyelvek II.: JAVA

JAVA PROGRAMOZÁS 2.ELŐADÁS

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

Az új be- és kimenet könyvtár

Java és web programozás

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

Java programozási nyelv 6. rész Java a gyakorlatban

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

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

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

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

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

Segédanyag: Java alkalmazások gyakorlat

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

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

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

Objektumorientált programozás C# nyelven III.

Java Programozás 1. Gy: Java alapok. Ismétlé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ási technológia

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

Osztályszintű elérés, kivételkezelés, fájlkezelés

Java Programozás 11. Ea: MVC modell

Programozási nyelvek Java

Segédanyag: Java alkalmazások gyakorlat

Web-technológia PHP-vel

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

A WEB programozása - JSP1 dr.gál Tibor őszi félév

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

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

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

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

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

3. Gyakorlat Ismerkedés a Java nyelvvel

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

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

117. AA Megoldó Alfréd AA 117.

Objektumorientált programozás C# nyelven

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

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

Az emelt szintű. informatika érettségi. programozási feladatainak. megoldása Java nyelven. NetBeans IDE 8.1 környezetben

Objektumorientált programozás C# nyelven

Java és web programozás

7. K: JAVA alapok Konzultáció

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

4. Gy: JAVA osztályok

Globális operátor overloading

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

OOP: Java 7.Gy: Öröklődés, referenciák

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

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

Informatika terméktervezőknek

Objektumorientált programozás C# nyelven


Programozási nyelvek II. JAVA

Programozási nyelvek Java

Ja J v a a v a há h l á óz ó a z t a i al a ka k l a maz ma á z s á o s k o Socket, URL

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

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

Java IX. telkezelés a Java-ban

Programozási nyelvek II.: JAVA

Java és web programozás

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

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Java IX. telkezelés a Java-ban

Öröklés és Polimorfizmus

Szoftvertechnológia alapjai Java előadások

Alkalmazott Modul III 6. előadás. Objektumorientált programozás: öröklődés és polimorfizmus

Programozás II. labor

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

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

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

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

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

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

Átírás:

Segédanyag: Java alkalmazások gyakorlat Készítette: Szabó Attila 2009/2010-2 félév, 2. gyakorlat 1 Osztályok és objektumok default, public, protected, private láthatóság a metódusokra és adattagokra (első órán szerepelt) az osztályobjektumok refrenciákon keresztül érhetők el (memóriacímet tárolnak) a referenciák értéke lehet null (a mutatott objektum típusától függetlenül) final kulcsszó: a referencia nem módosítható, a mutatott érték megváltozhat static kulcsszó: osztályszintű adattag vagy metódus: objektum példányosítás nélkül is létezzik és használható, illetve hívható 2 Származtatás az ősosztály szolgáltatásainak bővítésére alkalmas módszer kódújrafelhasználást segíti elő (jó, mert nem szeretjük ismételni a kódot) altípusképzés támogatja a nyelvben (programtervezési tervezési eszköz) Javaban altípusos polimorfizmus van a leszármazott rendelkezik a szülő metódusaival, adattagjaival a leszármazott típusú referencia mutathat szülő típusú objektumra statikus típus: a deklarált típus dinamikus típus: a referált objektum aktuális típusa @Override annotáció: explicit jelzés a metódus felüldefiniálására Object.equals()-t, Object.hashCode()-ot, Object.toString()-et szokás leggyakrabban felüldefiniálni 3 Kivételek Az Exception osztály dokumentációja: http://java.sun.com/j2se/1.5.0/docs/api/java/lang/exception.html (Kivételek: http://rymden.nu/exceptions.html:)) 4 I/O kezelés Néhány alapvető, fájlkezelésnél hasznos osztály: Osztály neve java.io.bufferedreader java.io.filereader java.io.printwriter Leírás Megvalósítja az alapvető olvasási funkciókat: ready(), readline(), stb. Egy java.io.filereader objektumot vár konstruktorparaméterként. Egy fájl elérési útját várja paraméterként. Megvalósítja az alapvető írási funkciókat: println(), stb. Egy java.io.filewriter objektumot vár konstruktorparaméterként és egy boolean értéket: törölje-e a fájlt a megnyitáskor. 1

java.io.filewriter java.util.stringtokenizer java.io.ioexception java.io.filenotfoundexception Egy fájl elérési útját várja paraméterként. Egy String objektumot felbont mezőkre a megadott szeparátor mentén. A java.io.filewriter konstruktora (is) dobja, ha nem sikerül inicializálni az objektumot. A java.io.filereader konstruktora (is) dobja, ha nincs meg a fájl. 5 Példaprogramok A program használni fog egy naplófájlt a hibák kiíratására. A naplózást megvalósító Logger.java forráskódja: package io; import java.io.filewriter; import java.io.ioexception; import java.io.printwriter; import java.util.calendar; public class Logger { //members private static PrintWriter logwriter; private static String file = "log"; //constructors public Logger(){ public Logger( String filename ){ if( filename!= null ) file = filename; //public methods public static void logstring( String line ){ if( logwriter == null ){ logwriter = new PrintWriter( new FileWriter( file, true ) ); catch( IOException e ){ System.out.println( "Couldn't open the log file!" ); Calendar calendar = Calendar.getInstance(); String timestamp = String.valueOf( calendar.get( Calendar.YEAR ) ) + "." + String.valueOf( calendar.get( Calendar.MONTH ) + 1 ) + "." + String.valueOf( calendar.get( Calendar.DATE ) ) + ". " + String.valueOf(calendar.get( Calendar.HOUR ) ) + ":" + String.valueOf( calendar.get( Calendar.MINUTE ) ) + ":" + String.valueOf( calendar.get( Calendar.SECOND ) ) + ":" + String.valueOf( calendar.get( Calendar.MILLISECOND ) ); logwriter.println( timestamp ); logwriter.println(line ); 2

logwriter.flush(); @Override protected void finalize() throws Throwable { logwriter.close(); super.finalize(); A főprogram (IOExampleMain.java) forráskódja: package ioexample; import io.logger; import java.io.bufferedreader; import java.io.filenotfoundexception; import java.io.filereader; import java.io.ioexception; import java.util.iterator; import java.util.stringtokenizer; import java.util.vector; public class IOExampleMain { private static BufferedReader reader = null; private static int linenum = 0; private static int position = 0; private static Vector<Integer> values = new Vector<Integer>(); //public functions public static void main( String[] args ){ //read file: args[0] if( args.length!= 1 ){ System.out.println( "Usage: java ioexample.ioexamplemain <filename>" ); //create reader reader = new BufferedReader( new FileReader( args[0] ) ); catch( FileNotFoundException e ){ System.out.println( "Cannot open file " + "(see log for details)!" ); Logger.logString( "Couldn't open the specified file" ); //read file while( reader.ready() ){ linenum++; String line = reader.readline(); StringTokenizer tokenizer = new StringTokenizer( line ); while( tokenizer.hasmoretokens() ){ position++; String token = tokenizer.nexttoken(); Integer value = 0; value = Integer.valueOf( token ); 3

catch( NumberFormatException e ){ System.out.println( "Error while parsing numbers " + "(see log for details)!" ); Logger.logString( "Error while parsing numbers: line " + linenum + " position " + position ); values.add( value ); reader.close(); catch( IOException e ){ System.out.println( "Error (see log for details)!" ); Logger.logString( "Error: line " + linenum + " position " + position ); //do sg with data SequenceTester tester = new SequenceTester( 1, 3 ); boolean ispermutation = tester.ispermutation( values ); if( ispermutation ){ System.out.println( "The sequence is a permutation!" ); else{ System.out.println( "The sequence is not a permutation!" ); Iterator<Integer> it = values.iterator(); while( it.hasnext() ){ System.out.print( it.next() + " " ); Az input fájl formátuma: az input fájl egész számokat tartalmaz whitespace-ekkel elválasztva. A főprogramban használt SequenceTester forráskódja (egy vektorról képes megállapítani, hogy a tárolt elemek egy megadott intervallum permutációját adják-e): package ioexample; import java.util.iterator; import java.util.vector; public class SequenceTester{ //======================================================================== //members protected int minvalue = 0; protected int maxvalue = 0; //construstors public SequenceTester( int min, int max ){ if( min <= max ){ minvalue = min; maxvalue = max; //public functions public boolean ispermutation( Vector<Integer> candidate ){ //check candidate size: too short or too long sequence cannot be a permutation 4

if( candidate.size()!= maxvalue - minvalue + 1 ) return false; //init the ok vector Vector<Boolean> isok = new Vector<Boolean>( candidate.size() ); for( int i = 0; i < candidate.size(); ++i ) isok.add( i, false ); Iterator<Integer> it = candidate.iterator(); while( it.hasnext() ){ Integer act = it.next(); if( minvalue <= act && act <= maxvalue ){ if(!isok.get( act - minvalue ) ){ isok.set( act - minvalue, true ); else{ return false; //this number is duplicated in the sequence else{ return false; //the next number is out of the interval return true; 6 Feladat 1. Írj sudoku ellenőrző osztályt! Az osztály származzon a SequenceTester osztályból, és ellenőrző metódusokkal egészítse ki azt. protected boolean checkrows( Vector<Integer> candidate ): Ellenőrzi a paraméterként kapott sudoku sorainak helyességét (pl: 9x9-es sudoku esetén candidate vektor sorfolytonos ábrázolásban tárolja a 81 elemet). A megvalósításhoz használja az alábbi segédfüggvényt. protected Vector<Integer> getrow( Vector<Integer> candidate, int index ): A metódus visszaadja a sudoku megadott sorát. protected boolean checkcols( Vector<Integer> candidate ): Ellenőrzi a paraméterként kapott sudoku oszlopainak helyességét. A megvalósításhoz használja az alábbi segédfüggvényt. protected Vector<Integer> getcol( Vector<Integer> candidate, int index ): a metódus visszaadja a sudoku megadott oszlopát. protected boolean checkblocks( Vector<Integer> candidate ): Ellenőrzi a paraméterként kapott sudoku blokkjainak helyességét. A megvalósításhoz használja az alábbi segédfüggvényt. protected Vector<Integer> getblock( Vector<Integer> candidate, int index ): a metódus visszaadja a sudoku megadott blokkját. A három ellenőrző függvényt hívd meg egy publikus isvalidsudoku metódusban. Írj az ellenőrző osztályhoz tesztprogramot! A program várja egy szöveges fájlban a sudokut: a sudoku sorai külön sorokban, az egyes sorok elemei whitespace-el elválasztva következzenek a fájlban. 5