Vous êtes sur la page 1sur 134

Debreceni Egyetem

Informatikai Kar

A JAVA NYELV TANTSA


KZPISKOLBAN

Tmavezet:

Ksztette:

Ksa Mrk
egyetemi tanrsegd

Fenyvesi Tibor
Szab Lszl
Informatika tanr szak

Debrecen
2010.

Tartalomjegyzk

Tartalomjegyzk...............................................................................................................2
1. Bevezets (F.T.) ...........................................................................................................4
2. A Java programozsi nyelv (Sz.L.) ...............................................................................6
2.1. A Java programozsi nyelv trtnete .....................................................................6
2.2. A Java programozsi nyelv bemutatsa .................................................................7
3. A programozsi nyelv tantsnak kvetelmnyei (F.T.).............................................10
3.1. A Nemzeti Alaptanterv elrsai..........................................................................10
3.2. Kerettantervi elrsok ........................................................................................10
3.3. Az emelt szint informatika rettsgi vizsga kvetelmnyei ................................11
4. A szmtgp jelentsge s felhasznlsa a tantsi-tanulsi folyamatban (Sz.L.)......12
4.1. A szmtgpes oktats elmlete .........................................................................12
4.2. A szmtgpek a tantsi-tanulsi folyamatban...................................................13
4.3. Az oktatprogramok hatsa az oktat-nevel munkra ........................................15
5. Az oktatprogram bemutatsa ....................................................................................16
5.1. Fejleszteszkzk (F.T.) .....................................................................................16
5.2. Rendszerterv (Sz.L.)............................................................................................16
5.3. Az oktatprogram rszletes bemutatsa ...............................................................19
5.3.1. A kezdetek (Sz.L.) ....................................................................................19
5.3.2. Nyelvi alapelemek (Sz.L.).........................................................................27
5.3.3. Nyelvi eszkzk (Sz.L.)............................................................................31
5.3.4. Numerikus- s egyb adattpusok (Sz.L.) ..................................................39
5.3.5. Karakteres adattpusok (Sz.L.) ..................................................................43
5.3.6. Elgaztat utastsok (Sz.L.) .....................................................................49
5.3.7. Ciklusszervez utastsok (Sz.L.)..............................................................55
5.3.8. Tmbk (Sz.L.).........................................................................................60
5.3.9. Input-output mveletek (F.T.) ...................................................................65
5.3.10. Emelt szint rettsgi feladatok megoldsa (F.T.) .....................................74
5.3.11. Az objektum-orientlt paradigma (F.T.) ....................................................84
5.3.12. Osztly s csomag (F.T.)...........................................................................88

5.3.13. rklds (F.T.) .......................................................................................97


5.3.14. Kivtelkezels (F.T.)...............................................................................104
5.3.15. Objektum-orientlt feladat megoldsa (F.T.) ...........................................113
5.4. Az oktatprogram hasznlata (F.T.)...................................................................119
6. A tovbbfejleszts lehetsgei (F.T.)........................................................................120
7. sszefoglals (Sz.L.)................................................................................................121
8. Irodalomjegyzk ......................................................................................................123
9. Fggelk ..................................................................................................................124
9.1. Feladatok ..........................................................................................................124
9.2. Fogalomtr (F.T.)..............................................................................................132
10. Ksznetnyilvnts .................................................................................................134

Szerzk:
F.T.: Fenyvesi Tibor
Sz.L. Szab Lszl

1. Bevezets
Napjaink kzoktatsnak hangslyos rszv vlt az informatikai tuds. Mg korbban a
szmtstechnika majd ksbbi nevn informatika tantrgy csak szakmai trgyknt
szerepelt az iskolarendszer oktats palettjn, mra mr kzismereti trggy vlt.
Gyakorlatilag egyenrang lett az alaptantrgyakkal.
Ma a mindennapi let szinte minden terlete megkveteli az informatikai alaptudst.
Ez az alaptuds az informatikai eszkzk s alkalmazi szoftverek legalbb alapszint
hasznlatt jelenti, amelyet a mai ifjsg a kzoktats keretein bell elsajtthat. Van azonban
az informatikai oktatsnak egy msik ga is, amely a kezdeti idszak (80-as, 90-es vek)
egyeduralma utn gyakorlatilag httrbe szorult. Ez pedig a programozi tuds. A
trsadalomnak egyre tbb j programozra lenne szksge, mert az informatika trnyerse
tretlen. Nem elg a hardver, nem elg a kpzett felhasznl, ha nincsenek j szoftverek! Az
internet minden kpzeletet fellml trnyerse szintn programozk hadt ignyli, mert az
interaktv weboldalak nem msok, mint szmtgpes programok. Ezrt a leend
programozk kpzst rdemes minl elbb elkezdeni, de legksbb a kzpiskolai kpzs
keretn bell felttlenl.
Nhny ve lehetsg van arra, hogy kzpiskolban a hagyomnyos programozsi
nyelvek mellett (Pascal, Delphi, Visual Basic, C, C++) egy viszonylag j nyelv, a Java nyelv
is oktathat. Egyre inkbb trt hdt, az internet egyik alapnyelve, sok eszkz (pl. mosgp,
mobiltelefon) vezrlnyelve. jdonsga abban rejlik, hogy ellenben a korbbi eljrsorientlt programozsi nyelvekkel j szemlletet kpvisel: a tisztn objektumorientlt
programozst. Ez a paradigma az jrafelhasznlhatsg s a bezrtsg megvalstsval
korszer, biztonsgos eszkzt ad a programozk kezbe.
Szerztrsammal, Szab Lszlval egytt mint kzpiskolban tant pedaggusok
gy reztk, hogy lve a diplomamunka-kirs adta lehetsggel csoportmunka keretben
rdemes lenne foglalkozni ezzel a nyelvvel. Clul tztk ki egy olyan oktatprogram
elksztst, amelynek segtsgvel egy kzpiskols dik is knnyen elsajtthatja a Java
nyelv alapjait, s megismerkedhet az objektum-orientlt programozsi mdszerekkel is.
Tartalmt tekintve szem eltt tartottuk, hogy az tadni kvnt ismeretek krnek meg kell
felelnie a NAT, az informatikai kzponti kerettanterv s az emelt szint informatika rettsgi
vizsga programozsi feladata ltal tmasztott kvetelmnyeinek is.

Az elgondolst tett kvette, s a tmt kt rszre osztva a clkitzst megvalstottuk.


Formailag ltnk az internet adta lehetsgekkel, s a webes feldolgozst vlasztottuk. Az
oktatprogram els rszben amelyet a kollgm ksztett el a Java nyelv alapelemeirl
(adattpusok, adatszerkezetek, programozsi s vezrl szerkezetek) van sz, mg a msodik
rszben az I/O mveletek s a kivtelkezels ismertetse, valamint rettsgi programozsi
feladatok megoldsa mellett nagyrszt az objektum-orientlt programozs alapjait dolgoztam
fel.
Az elkszlt tananyagban az alapismeretek mellett igyekeztnk bemutatni minl tbb
letszer, rdekes pldt, valamint programozsi trkkket, fogsokat is. Minden
pldaprogramot rszletes magyarzattal lttunk el, kln kiemelve a lnyeges rszeket. Az
ismertetett programokhoz mellkeltk azok forrskdjt is. A fejezetek vgn az
nellenrzst szem eltt tartand azonnal kirtkeld tesztkrdseket s programozsi
feladatokat helyeztnk el. Termszetesen a feladatok megoldsa is megtallhat az oldalon.
Teht oktatprogramunk felptse a klasszikus j anyagot kzl-, gyakoroltat- s ellenrz
funkcikat kveti. A webes elrhetsg pedig mindenki szmra lehetv teszi, hogy akr
otthonrl, egyni temben is feldolgozhassa az anyagot.
A Java nyelvet alapveten knny elsajttani. Azonban irnyts nlkl knnyen
elveszhetnk a szmtalan utasts, metdus s azok opcii kztt. A nyelv rendkvl
kifinomult eszkzkkel rendelkezik szinte minden programozsi feladat elvgzsre, de ezen
eszkzk megtallsa s clszer felhasznlsa nem knny. Ezzel a projekttel megprbltuk
a Java nyelvet egy kzpiskolai tanul szmra is rthetv tenni gy, hogy a nyelvben
kell rutint szerezve minden tle elvrhat programozsi feladatot knnyedn megoldjon.

2. A Java programozsi nyelv


2.1.

A Java programozsi nyelv trtnete

A kezdetek 1991-re nylnak vissza, a Sun Microsystem egy nll fejleszti csoportot hozott
ltre Green Team fantzia nven. Azt a feladatot kaptk, hogy olyan hztartsi eszkzket
ksztsenek, amelyek beptett mikrocsippel (mikrochip) rendelkeznek, s kpesek az egyms
kztti kommunikcira is. Ebben a csoportban dolgozott James Gosling, Patrick Naugthon
s Mike Sheridan. Kezdetben a C++ programozsi nyelvvel prblkoztak, de Gosling
felismerte, hogy ez a nyelv alkalmatlan erre a feladatra, s a csapat megtervezte a sajt
nyelvt, az Oak-ot (Tlgy). A nv lltlag gy jutott Gosling eszbe, hogy ppen egy
knyvtrat hozott ltre az j nyelvnek, s akkor az ablakon kinzve megltott egy tlgyft. A
nyelvvel szemben tmasztott alapvet elvrs az volt, hogy platformfggetlen legyen.
A kezdeti sikerek ellenre sem kaptak nagyobb megrendelseket, gy 1993 tavaszra a
projekt vgveszlybe kerlt. Ekkor dntttek gy a csoport vezeti, hogy meg kell
prblkozni az internettel.
A grafikus bngszk elterjedsvel az internet egyre nagyobb npszersgre tett
szert. Az Oak technolgia a platformfggetlensgnek ksznheten tkletesen megfelelt az
internet szmra, hiszen nem okozott gondot a hlzatba kapcsolt gpek inhomogenitsa.
1995 elejre a csapat kifejlesztett egy grafikus bngszt Webrunner nven. Ksbb ez a
bngsz lett az se a HotJava bngsznek, s itt jelent meg a Java kabalafigurja a Duke
figura. Az Oak nevet a Sun-nak nem sikerlt levdenie, mert kiderlt, hogy mr hasznljk
egy programozsi nyelv elnevezseknt. A programnyelv kifejlesztsnek ideje alatt
rengeteg kvt fogyasztottak a fejlesztk, gy a kv hazjnak emlket lltva kapta a
technolgia a Java nevet.
Az interneten lehetv tettk a forrsok ingyenes letlthetsgt, s gy brki szmra
kiprblhatv, tesztelhetv vlt. A letltsek szma rohamosan nvekedett, 1995
novemberben mr letlthet volt a nyelv bta verzijnak forrskdja s fejlesztkszlete.
Nhny v alatt a Java nyelv a programozk egyik legfontosabb eszkzv vlt. Ksznhet
mindez annak a lelkes kis csapatnak, amely megltta a platformfggetlensg irnti ignyt, s
az ebben rejl lehetsgeket.

2.2.

A Java programozsi nyelv bemutatsa

[14] A Java nyelv fejleszti hivatalos kiadvnyban (white paper) tettk kzre tervezsi
cljaikat s eredmnyeiket. Ez a kiadvny az albbi szavakkal jellemzi a Java nyelvet:
Egyszer (simple): A Java nyelv a C++ leegyszerstett vltozata. Leegyszersdtt a
szintaktika (eltntek a mutatk, automatikus lett a memria felszabadtsa). Java
programot rni vagy olvasni sokkal egyszerbb, mint egy C++ programot.
Objektum orientlt (object-oriented): Majdnem tiszta OO nyelv, egy kevsb hibrid
nyelv. Egy Java programot osztlyok ksztsvel s jrafelhasznlsval ptnk
ssze.
Elosztott (distributed): Egy Java program kpes az internet brmely pontjn tallhat,
URL-lel azonostott objektumot elrni s feldolgozni.
Robusztos (robust): Mskppen hibatr, megbzhat. A nyelv tervezi nagy gondot
fordtottak a hibk korai felismersre, mg a fordts idejn trtn kiszrsre.
Biztonsgos (secure): A Java nyelvet elssorban internetes krnyezetben val
mkdsre terveztk, ezrt biztonsgi korltokat kellett bevezetni, nehogy egy ilyen
program krt tehessen a msik felhasznl szmtgpben.
Architektra semleges (architecture neutral): A fordtprogram gptpustl fggetlen
bjtkdot (.class fjl) generl, s ez a kd a klnbz gpek processzorain futtathat,
ha biztostva van a megfelel futtat krnyezet (Java Virtual Machine, JVM). Az adott
gp a bjtkdot futs kzben rtelmezi a virtulis gp segtsgvel. A JVM ltal
vglegesre fordtott kd a natv kd, ez a kd mr tnylegesen fut az adott gpen.
Hordozhat (portable): A nyelvnek nincsenek implementci fgg elemei, azaz nem
fordulhat el olyan eset, hogy egy nyelvi elem vagy osztly az egyik krnyezetben
mskpp legyen specifiklva, mint a msikban.
Interpretlt (interpreted): A clgpen fut natv kdot az rtelmez hozza ltre
utastsonknt a bjtkd (.class fjl) rtelmezsvel. Ha a clgpen installlnak egy
Java rtelmezt, akkor brmilyen Java kdot rtelmezhet.
Nagy teljestmny (high performance): Ez most mg egy elrend cl, a fejlesztk
azon munklkodnak, hogy a jelenlegi fordts s futtats sorn jelen lv jelents
idignyt lervidtsk.

Tbbszl (multithreaded): A tbbszl programozs lnyegben azt jelenti, hogy


ugyanabban az idben tbb programrsz fut egymssal prhuzamosan, tbb szlon. gy
jobban kihasznlhat a szmtgp kzponti egysge.
Dinamikus (dynamic): A Javt gy terveztk, hogy knnyedn tovbb lehessen
fejleszteni. Az osztlyknyvtrak szabadon bvthetk anlkl, hogy azok hatssal
lennnek az ket hasznl kliensekre.
A Java tartalmaz olyan eszkzket, amelyek nem objektumok, ezrt, majdnem tiszta OO
programnyelvnek tekintjk. (pl. a primitv adattpusok is ilyen eszkzk)
Nzzk meg, hogy mit is rtnk az objektumorientltsg kifejezs alatt?

Egy objektumorientlt program egyttmkd objektumok (object) sszessge.

A program alap-ptkvei az objektumok. Ezek olyan, a krnyezetktl jl


elklnthet, viszonylag fggetlen sszetevk, amelyeknek sajt viselkedsk,
mkdsk s lehetleg rejtett, bels llapotuk van. Egy objektumra a krnyezetben
lv egyb objektumok hatnak, s ennek hatsra sajt llapotukat megvltoztathatjk.

Minden objektum valamilyen osztlyba (class) tartozik. Az osztlyok megfelelnek


az absztrakt adattpusoknak, minden objektum valamely tpus pldnya, egyede
(instance). Az osztlyok definiljk az egyes objektumok llapott ler
adatszerkezetet, s a rajtuk vgezhet mveleteket, az gy nevezett mdszereket
(method). Az egyes egyedek csak az llapotukat meghatroz adatszerkezet
tnyleges rtkeiben klnbznek egymstl, a mdszerekkel definilt viselkedsk
kzs.

Az egyes osztlyokat az rklds hierarchiba rendezi. Az rklds az az eljrs,


amely segtsgvel egy osztly felhasznlhatja a hierarchiban felette ll
osztlyokban definilt llapotot (adatszerkezeteket) s viselkedst (mdszereket). gy
az ismtld elemeket elegend egyszer, a hierarchia megfelel szintjn definilni.

A Java programok osztlyokbl plnek fel. Java nyelven programot rni annyit jelent, mint
elkszteni az osztly programjt, illetve felhasznlni a rendelkezsre ll kszletbl (API1), a
feladat megoldshoz szksges osztlyt.

Application Programming Interface

A Java nyelv az elmlt nhny vben llandan fejldtt, talakult. Napjainkig az


albbi vltozatok jelentek meg:
1.0 Ez volt az els verzija a Java virtulis gpnek s az osztlyknyvtraknak. (1996)
1.1 Itt jelent meg elszr a bels osztly fogalom, ami lehetv teszi tbb osztly
egymsba gyazst. (1997)
1.2 Ez a verzi szmottev mrfldk volt a nyelv evolcijban. Hogy ezt
kihangslyozza, a Sun hivatalosan Java 2-nek nevezte el. (1998)
1.3 Csak nhny kisebb vltoztatst vgeztek el rajta. (2000)
1.4 Ez ma a legelterjedtebb vltozat. (2002)
5 Bels szmozs szerint 1.5, kdneve Tiger, jdonsga pldul a tovbbfejlesztett
ciklusmegoldsok, az adattpusok automatikus objektumm alaktsa (autoboxing), a
generic-ek. (2004)
6 Bels szmozs szerint 1.6.0, kdneve Mustang. Decemberben jelent meg a vgleges
vltozat kiterjesztett nyomkvetsi s felgyeleti megoldsokkal, szkriptnyelvek
integrcijval, grafikusfellet-tervezst tmogat kiegsztsekkel. (2006)
7 Kdneve Dolphin (?)

3. A programozsi nyelv tantsnak kvetelmnyei


3.1. A Nemzeti Alaptanterv elrsai
A kzpiskolai informatika tantrgy oktatsnak kvetelmnyeit legmagasabb szinten a
Nemzeti Alaptanterv (NAT) rgzti. Ebben az alapdokumentumban az informcis
trsadalom kihvsainak val megfelels kiemelt clknt szerepel. A tanulnak el kell
sajttania a megfelel informciszerzsi, -feldolgozsi, adattrolsi, -szervezsi s -tadsi
technikkat. [1] Kpess kell vlnia a vals vilg modellezsre, amelyhez az informatika
az egyik alapvet eszkzt biztostja. A fejlesztsi feladatok kztt megtallhat az
algoritmizls s az adatmodellezs, mint elsajttand tuds.
3.2. Kerettantervi elrsok
Kvetkez szintet kpvisel a kerettanterv, amely a NAT irnymutatsa alapjn konkretizlja a
clokat s a kvetelmnyeket. A kt f (kzpiskolai) iskolatpus lehetsgeit sszehasonltva
risi klnbsget tapasztalunk! Gyakorlatilag csak a szakkzpiskolai szakmacsoportos
alapoz oktats (11.-12. vfolyamok) keretn bell van md megfelel raszmban
informatikt tantani (heti 8 ra!), a gimnziumi raszm (heti 1-2 ra) mr nmagban is
tragikusan kevs, a programozsra pedig gyakorlatilag id sem jut [3]. Ez utbbi
iskolatpusban csak fakultci vagy szakkr keretn bell van lehetsg behatbban
foglalkozni a tmval. Nzzk, mit r el a szakkzpiskolai kerettanterv a programozssal
kapcsolatban [2]:
A szmtgp-programozs clja, hogy a tanulk megismerjk

az alapvet programozsi elveket s tteleket


a programozsi elmlet alapjait
a strukturlt programozs fogsait
az egyszerbb programtervezsi mdszereket
az objektum-orientlt programozs alapjait

Fontosabb programozssal kapcsolatos tmakrk:


11. vfolyam:

a programozs eszkzei
o programkd, programnyelv, kdols
o fejleszti krnyezet, fordts, szerkeszts
o utastsok, adatok, fggvnyek, eljrsok s objektumok

10

programozs-technikai alapismeretek, programtervezs


o modellezs
o algoritmuskszts
o kdols, tesztels
rtkads, vltozk, konstansok
elgazsok s itercik szervezse, logikai felttelvizsglat
alapfggvnyek, fggvnyhvsok, paramtertads
egyszer s sszetett adatszerkezetek
rendezsi algoritmusok
alapvet I/O mveletek (konzol, fjl)

12. vfolyam:

az objektum-orientlt programozs elve s alapjai


osztly s objektum, konstruktor
objektumok felptse s tulajdonsgai (adattag, metdus)
lthatsg, hatskr
objektumok hierarchija, rklds
hibakezelsi eljrsok
Ezeknek a tartalmaknak meg kell jelennik az iskolk helyi tantervben, majd az erre

pl tanmenetekben is.
3.3. Az emelt szint informatika rettsgi vizsga kvetelmnyei
A kzpfok oktats lezrst ad rettsgi vizsgnak vlaszthatan az informatika
tantrgy is rsze lehet. A programozs azonban csak az emelt szint rettsgi vizsgn
szerepel, ahol is pontszmban a gyakorlati feladatsor tbb mint egyharmad rszt adja. Az
rettsgi vizsga vizsgaszablyzata az informatika rettsgi vizsga rszeknt szintn rgzti
a programozsi ismeretek kvetelmnyrendszert [4]:

egy programozsi nyelv rszbeni (specialitsok nlkli) ismerete


algoritmizls, adatmodellezs
elemi s sszetett adatok
adatstruktrk, fjlszervezs
elemi algoritmusok (rendezsek, rekurzi)
programkszts (tervezs, kdols, tesztels, hibakeress)
Mindezek az elrsok egyrtelmen meghatrozzk a programozsi nyelvek

kzpiskolai

oktatsval

kapcsolatos

clokat

kvetelmnyeket,

amelyeket

az

oktatprogramunk kifejlesztsnl mindig szem eltt tartottunk.

11

4. A szmtgp jelentsge s felhasznlsa a tantsi-tanulsi


folyamatban
1981-ben Ershov professzor az albbi megllaptst tette: a szmtgp-programozs
nhny ven bell olyan lesz, mint egy msodik bc, s ugyanolyan nlklzhetetlen lesz,
hogy tudjunk szmtgppel dolgozni, mint amilyen ma az, hogy tudjunk olvasni s rni.
4.1.

A szmtgpes oktats elmlete

[15] A System Development Corporation az albbi szmtgpes oktatsi rendszert dolgozta


ki:
(1)

(2)

(3)

(4)

TROL

SZEMLLTET
UTASTS

TANUL

VLASZOK

(6)
VISSZACSATOLT
ZENET
(7)

(5)

SZELEKTOR

VLASZ

A rendszer egyszersge lehetv teszi az elmleti meggondolsok bemutatst.


A tananyagot (1) bemutatjuk a tanulnak (3) a tananyaghoz fzd krdssel vagy
problmval (2) egytt. A vlasz (4) rtkelse (5) s automatizlsa kzlt visszacsatolt
zenet (6) jelentik a kvetkez lpseket. Ezutn j anyagrsz kvetkezik (7). Az utols
vlasztl fggen az j anyagrsz vagy korrigl anyagot tartalmaz, vagy bonyolultabb
krdseket trgyal. Az egsz ciklust addig folytatjuk, amg a leckt be nem fejeztk.
Erre a rendszerre plve fejlesztettk ki a Computer-based Laboratory for Automated
School Systems-t (szmtgpes laboratrium automatizlt oktatsi rendszerek szmra) s
CLASS-nak neveztk.
Ez a rendszer egyidejleg 20 tanul szmra rendelkezett perifrival. A hszas
ltszmot elssorban a helyhiny s a perifrik szma szabta meg, nem pedig a szmtgp
kapacitsa.

12

A fejlds kvetkez lpse, a terminlhlzattal sszekapcsolt szmtgpes


oktatrendszer volt.
Az oktatrendszerek fejldse napjainkban is lankadatlanul folyik tovbb. Az internet
megjelense, trhdtsa jabb lendletet adott a fejlesztseknek (Megjelentek a web alap
oktatsi anyagok, e-learning rendszerek stb.).
4.2.

A szmtgpek a tantsi-tanulsi folyamatban

A szmtgpeknek a tantsi-tanulsi folyamatban val felhasznlsi mdja alapjn az albbi


tpusok alakultak ki:
1. CAI (Computer Assisted Instruction) szmtgppel segtett oktats a tanul
kzvetlen kapcsolatban ll a szmtgppel. (1. bra)
2. CMI (Computer Managed Instuction) szmtgppel szervezett oktats. Itt a
szmtgp ltalban a tanr kzvettsvel szervezi, irnytja a tanulst.
3. CBI (Computer Based Instuctions) szmtgpre alapozott oktats. Az elz kt
mdszerre alapozva pti fel a tananyagokat.
A CAI programtpusok fbb csoportjai:
a) Begyakorl (drill and practike) programok
Ezek a programok fknt matematikai, fizikai, technikai s verblis fogalmak begyakorlst
szolgljk. A tanul addig kapja a begyakorland fogalmakkal, mveletekkel stb. kapcsolatos
feladatokat a szmtgptl, amg a kvnt begyakorlsi szintet el nem ri.
b) Konzultcis (tutorial) programok
A konzultcis programok diagnosztizl teszteket tartalmaznak. A tanul a program
feldolgozsa sorn igen sok irnyba mehet el, a krdsekre adott vlaszoktl fggen.
c) Problmamegoldsi (problem solving) programok
Amg az elz kt programtpusnl a feldolgozs algoritmusa elre meghatrozott, addig itt a
tanul feladata az, hogy adott problma megoldshoz algoritmust dolgozzon ki, s ezt
tesztelje. A feladat megoldsa sorn a szmtgpnek krdseket tehet fel, illetve szmtsokat
vgeztethet vele.
d) Szimulcis (simulation) programok
Ezek a programok abban segtik a tanult, hogy egy folyamat, mechanizmus stb. sszetevit
s ezek klnbz szitucikban mkd hatsait, azaz modelljt felfedezze. A tanul ltal
bevitt adatok alapjn a szmtgp szimullja a folyamatot s bemutatja, hogy mi lenne az

13

eredmnye. A tanul az eredmnyek ismeretben jra vlaszthat paramtereket, s jra


megismerheti dntsei kvetkezmnyeit.

SZMTGPKZPONT

Tananyag
Adatllomnyok

ISKOLA TANTEREM

Diafilmvett

Billentyzet

Szmtgp

Hallgati
Adatllomnyok

TANR
Kperny
TANUL

Billentyzet

1. bra

14

4.3.

Az oktatprogramok hatsa az oktat-nevel munkra

Napjainkban

egyre-msra

rasztanak

el

bennnket

klnbz

oktat-bemutat

(multimdis) programok. Egyes szmtgpes szoftverek egyre nagyobb hatssal vannak az


oktats folyamatra. A szmtgpek egyre inkbb tveszik a hagyomnyos oktatstechnikai
eszkzk szerept is, gy nem hagyhatjuk kiaknzatlanul a szmtgp nyjtotta
lehetsgeket. Br csodt sem vrhatunk felttlenl a szmtgptl (oktatprogramoktl),
hiszen a pedaggus emberi jelenltt, az oktatsban betlttt szerept soha nem ptolhatja,
valamint nem nlklzhet a tanul aktv kzremkdse sem a tantsi-tanulsi folyamatban.
Az oktatprogramok hasznlatval a tanrok knnyebben s szemlletesebben tudjk a
tananyagot tadni a tanulknak. A dikok amellett, hogy elsajttjk a szmtgp kezelst
aktvan rszt is vesznek a tantsi-tanulsi folyamatban. A programok segtsgvel egyszerre
tbb rzkszervre hatva trtnik az informcik tadsa, gy vlik hatkonyabb az ismeretek
tadsa-elsajttsa.
A szmtgp alkalmazsnak msik risi jelentsge abban ll, hogy az ismeretek
tadsa sorn alkalmazkodik a dikok egyni tempjhoz. Lehetsget biztost a
feladatmegoldsok sorn az azonnali rtkelsre, megmutatja a hibkat s tmutatst ad a
hibk kijavtshoz.
Az internet trhdtsval a klnbz oktatprogramok, segdanyagok, videk, stb.
otthonrl, a laksbl ki sem mozdulva is elrhetv vltak. Mindenki az rdekldsi krnek
megfelel informci birtokba juthat szempillants alatt. A vilghl nyjtotta
lehetsgeket kihasznlva a dikok kicserlhetik egymssal a tapasztalataikat, segtsget
krhetnek egymstl, frumokat hozhatnak ltre stb. Az internet teht egy kifogyhatatlan
informcis kincsesbnya, csak tudni kell a lehetsgeket hasznlni.

15

5. Az oktatprogram bemutatsa
5.1. Fejleszteszkzk
Az oktatprogram s a szakdolgozat elksztshez az albbi szoftvereket hasznltuk:

opercis rendszer:

Microsoft Windows XP Professional SP3 HU


(licenc: Tisztaszoftver Program)

weblapszerkeszt:

Microsoft Office FrontPage 2003 SP3 HU


(licenc: Tisztaszoftver Program)

szvegszerkeszt:

Microsoft Office Word 2003 SP3 HU


(licenc: Tisztaszoftver Program)

webbngsz:

Mozilla Firefox v3.6.3 HU


(licenc: Mozilla Public License, GNU)

Java futattrendszer: Java SE Development Kit v6u19


(licenc: GPL v2 + Classpath exception)

Java fejleszt:

NetBeans IDE v6.8


(licenc: CDDL s GNU General Public License)

Tesztgenertor:

eXe XHTML editor v1.04.1


(licenc: GNU General Public License)

5.2. Rendszerterv
Az oktatprogram ksztse sorn a bevezetben ismertetett megfontolsok vezettek
bennnket. Egy olyan segdeszkzt kvnunk a kzpiskols dikok kezbe adni, aminek a
hasznlatval elsajtthatjk a Java programok ksztsnek a menett, valamint kpesek
lesznek az emelt szint rettsgin a programozsi feladat megoldsra is.
A kvetelmnyek (3. fejezet) ttanulmnyozsa utn, valamint a korbbi vekben
szerzett szaktanri tapasztalatainkat (Pascal programozsi nyelv tantsa) figyelembe vve a
tananyagot 15 htre bontottuk, heti 4 tantsi ra keretben. gy ltjuk, hogy ez a megfelel
forma arra, hogy tadjuk az ismereteket, valamint kszsgszintre hozzuk az alapvet
programozstechnikai elemek elvgzst.
A tantsi egysgeket a kvetkezk szerint alaktottuk ki:
1. ht

A kezdetek

2. ht

Nyelvi alapelemek

3. ht

Nyelvi eszkzk

4. ht

Numerikus- s egyb adattpusok

16

5. ht

Karakteres adattpusok

6. ht

Elgaztat utastsok

7. ht

Ciklusszervez utastsok

8. ht

Tmbk

9. ht

Input-output mveletek

10. ht

rettsgi feladatok megoldsa

11. ht

Az objektum-orientlt paradigma

12. ht

Osztly s csomag

13. ht

rklds

14. ht

Kivtelkezels

15. ht

Objektum-orientlt feladat megoldsa

Minden egyes tantsi egysg a kvetkez mdon pl fel:


1. Tartalom
2. Kidolgozs
3. Tesztkrdsek
4. Feladatok
Tartalom: A fejezetek elejn tallhat, tmutatt nyjt a dikok szmra az adott tantsi
egysg felptsrl, tananyag tartalmrl.
Minta:

Kidolgozs: Az adott tma rszletes, pldaprogramokkal szemlltetett bemutatsa tallhat itt.

17

Tesztkrdsek: A tananyag vgn ellenrz krdsek segtsgvel prbljuk az elsajttott


ismereteket feleleventeni. A tanulk vlaszt az oktatprogram azonnal
rtkeli.
Minta:

Feladatok: Az itt tallhat feladatok elksztsvel a tanulk, elmlytik a lecke ismereteit,


begyakoroljk az adott egysghez tartoz programozi fogsokat.
Minta:

A feladatok megoldsa is megtallhat a tananyagban, gy a dikok nllan kpesek


a munkjukat leellenrizni.
A tananyag elrhet az interneten, gy biztostjuk azt, hogy esetleges lemarads esetn
a dikok ptolni tudjk a kimaradt ismereteket, valamint gy a sajt egyni tempjukhoz
igazodva tudnak haladni a tananyag feldolgozsban.
A fent emltett szempontokat kvetve ksztettk el az oktatprogramot.
Az oktatprogram egy webhely, amely elrhet a http://java2.uw.hu cmen.
Tartalmazza a tananyagot, teszteket, feladatokat a feladatok megoldst, valamint
kiegsztettk egy fogalomtrral is.

18

A program nyitkpernyje:

5.3. Az oktatprogram rszletes bemutatsa


Az albbiakban bemutatjuk a fejezetekre bontott oktatprogramot, amelynl egy-egy fejezet
megfelel raszm esetn (kb. 4-6 ra) 1 ht alatt feldolgozand ismeretanyagot tartalmaz.
A szakdolgozat szkre szabott terjedelme miatt az egyes fejezetek vgn tallhat
tesztkrdsek, gyakorl feladatok s azok megoldsai nem kerltek a dolgozatba, de a
weboldalon termszetesen elrhetk.
5.3.1. A KEZDETEK
5.3.1.1. ltalban a Javrl
[16] A Java egy objektum-orientlt programozsi nyelv, amelyet a C++ programnyelvbl
fejlesztettek ki. Elsdleges clja az volt, hogy legyen egy olyan programozsi nyelv, amelyet
az interneten keresztl is hasznlhatunk, biztonsgos s lehetleg platformfggetlen.

19

A platformfggetlensg azt jelenti, hogy nemcsak UNIX-on, PC-n, ... stb, lehet futtatni
az adott programot, hanem brmilyen gptpuson. Ez annyiban sntt csupn, hogy
brmilyen gptpuson futtathat egy Java program, amely rendelkezik Java futtatval, az
n. Java Virtual Machine-nal (JVM), azaz egy virtulis, Java programot futtatni kpes
krnyezettel.
Az interneten keresztl trtn hasznlat azt jelenti, hogy a Web-bngszben
megjelen Weblapjainkrl indulhatnak n. Java appletek, amelyek azonos mdon fognak
megjelenni s futni, minden platformon fut Web-bngszben. A Java appletek a Java
programoktl abban klnbznek, hogy az appletnek korltozottak a kpessgei. Pldul nem
rhatja, olvashatja a helyi fjljainkat, mg egy Java programbl ugyangy beolvashatom,
rhatom mintha azt egy msik programozsi nyelven tettem volna meg.
A Java programozsi nyelv jellemzi:
egyszer
objektumorientlt
elfordtott
rtelmezett
robusztus
biztonsgos
semleges architektrj
hordozhat
nagy teljestmny
tbbszl
dinamikus
A Java fordtprogramos programnyelv, de a fordts folyamata az albbiak alapjn trtnik:
Elszr a forrsprogramot a Java-fordt (compiler) egy kzbls nyelvre fordtja
> Java bjtkdot kapunk eredmnyl (ez a bjtkd hordozhat)
Ezt a kdot rtelmezi s futtatja a JVM. A JVM teht egy interpreternek
tekinthet.
A Java programok ksztshez az albbiakra lesz szksgnk:

20

Java integrlt fejlesztkrnyezet (Java SE + NetBeans).


Letlts: http://java.sun.com/javase/downloads/index.jsp
Telepts: A telepts a Windowsban megszokott egyszersggel trtnik,
ltalban elegend a Next gombra kattintani.
Java dokumentcik
A dokumentcik letlthetk a http://java.sun.com oldalrl.
5.3.1.2. Ismerkeds a fejlesztkrnyezettel (NetBeans)
A programok ksztsnl a Sun sajt fejlesztkrnyezett a NetBeanst fogjuk hasznlni. Ez
egy integrlt fejlesztkrnyezet (Integrated Development Environment, IDE). A NetBeans
lehetv teszi a programozk szmra a programok rst, fordtst, tesztelst, valamint
hibakeress vgezst, majd a programok profilozst s teleptst is.
Ismerkedjnk meg egy egyszer projekt ksztsnek a folyamatval! (Hogyan lehet
Java alkalmazst kszteni?)
5.3.1.2.1. Projekt ltrehozsa
A NetBeans indtsa utn File > New Project

A Java kategrin bell a Java Application projektet vlasszuk ki.

21

A kvetkez lpsben a projekt nevt kell megadnunk.


Kapcsoljuk be a Create Main Class, valamint a Set as Main Project opcit.

A Finish gomb lenyomsval indul a varzsl s elkszti a projektnket.


A varzsl futtatsnak eredmnye:

22

Az elz lpseket vgrehajtva elksztettnk egy Szerbusz_Vilg nev projektet,


amely tartalmaz egy szerbusz_vilag nev csomagot, valamint egy Main nev osztlyt.
Ezekrl a ksbbiek sorn fogunk tanulni.
5.3.1.3. Az els program elksztse
Feladat: dvzl szveg kirsa a kpernyre. (Szerbusz kedves Idegen!)
Fontos tudnunk, hogy a Java nyelvben megklnbztetjk a kis- s nagybetket.
Ezenkvl a forrsprogram fjlneve s a benne definilt public tpus osztly neve azonos
kell legyen, mg a betllst tekintve is.
Ksztsnk egy j projektet ElsoProgram nven.
A kszts menete az elz rszben lertak alapjn trtnik, azzal az eltrssel, hogy
most ne hagyjuk bekapcsolva a Create Main Class, valamint a Set as Main Project opcit.
Szrjunk be a projektbe egy res Java fjlt.

Az osztly neve egyezzen meg a projekt nevvel.

23

Elkszlt az ElsoProgram projektnk, egy ugyanolyan nev osztllyal.

Gpeljk be a forrsprogramot a fejlesztrendszerbe!


//Els program
public class ElsoProgram{
public static void main(String[] args) {
System.out.println("Szerbusz kedves Idegen!");
}
}
Klnsen figyeljnk oda minden zrjelre, pontosvesszre, mert egy jel hinya is
szintaktikai hibt eredmnyez, s nem fogja a fordt elfogadni. A berskor a plda szerinti

24

tagolsban vigyk be a programot. Ez azrt fontos, mert gy knnyen ttekinthet lesz a


programunk, s a hibkat gyorsan felfedezhetjk.
A parancsok begpelsnl hasznlhatunk rvidtseket, ltalban a parancs els kt
karakternek a begpelse utn nyomjuk meg a TAB billentyt. pl.
pu + <TAB>
cl + <TAB>

public
class
public static void
psvm + <TAB>
main(String[] args{})
sout + <TAB> System.out.println("");

Vizsgljuk meg soronknt a program felptst!


1. A // kezdet sorok megjegyzsek, s nem kerlnek feldolgozsra. Itt a program
rthetsgt nvel egyni megjegyzseket helyezhetnk el.
2. Ebben a sorban adjuk meg az osztly defincijt, amelyben meghatrozzuk a
lthatsgt (public), a nevt (ElsoProgram) s egyebeket, melyekrl a
ksbbiekben lesz sz. Ezt kveti egy blokk, amelyet kapcsos zrjelek kz zrunk.
3. Programunk egy metdust tartalmaz, amelynek neve main, vagyis fmetdus. Az
ves zrjelben egy karakterlnc-tmbt definilunk String args[], amelyben

25

a parancssori paramtereket kapjuk meg. A main metdus tartalmt is kapcsos


zrjelek kz zrjuk.
4. A System.out.println az ves zrjelben megadott karakterlncot rja ki a
kpernyre.
Fordts, hibakeress
Ha sikeresen begpeltk a forrsprogramunkat, mentsk el, s fordtsuk le.
Figyelem! Eltte lltsuk be a kvetkezt: Jobb egrgombbal kattintsunk a Projekt ablakban
tallhat ElsoProgram projektnkre. A megjelen menkbl vlasszuk ki a Set as Main
Project opcit!

A fordtst a Run menben, vagy az eszkztron rhetjk el

, ahol ktfle

lehetsg kzl vlaszthatunk. (Build Main Project, Clean and Build Main Project)
Az Output ablakban kapunk tjkoztatst a fordts eredmnyrl, s az elfordul
hibkrl.
Futtats
A sikeresen lefordtott programot futtathatjuk.
A futs eredmnyt az Output ablakban tekinthetjk meg.

26

5.3.2. NYELVI ALAPELEMEK


5.3.2.1. Karakterkszlet
A program forrsszvegnek legkisebb alkotrszei a karakterek.
Az UNICODE 16 bites kdtblra pl, ahol bet minden nyelv betje lehet.
Tartalmazza az sszes nemzetkzi abc-t. Megklnbzteti a kis- s nagybett.
Kategrik:
betk (minden nyelv betje)
szmjegyek (0-9 decimlis szmjegy)
egyb karakterek (mveleti jelek, elhatrol jelek, rsjelek, specilis karakterek)
5.3.2.2. Szimbolikus nevek
5.3.2.2.1. Azonost
Olyan karaktersorozat, amely betvel kezddik, s betvel vagy szmjeggyel folytatdhat.
Arra hasznljuk, hogy a programozi eszkzeinket megnevezzk vele, s ezutn brhol a
program szvegben hivatkozhassunk r. Betnknt nem csak a nemzeti karaktereket, hanem
az _ s $ jelet is hasznlhatjuk.
Azonost kpzsi szablyok:
Az azonost brmilyen hossz Javban hasznlhat unikd karaktersorozat lehet.
Egy azonost nem kezddhet szmjeggyel, nem lehet kulcssz, s nem lehet a
nyelv egy elre definilt konstansa (true, false vagy null).
Kt azonost csak akkor egyezik meg, ha unikd karaktereik rendre
megegyeznek.

27

Pldk az azonostra:
Szablyos Java azonostk: Nem azonostk:
x
x+y
r
x*y+3
diak_kod
12 t
Nhny gyakorlati hasznos tancs az azonostk ksztshez:
Prbljunk meg jl olvashat, beszdes azonostkat vlasztani. (minSebesseg,
karakterekSzama)
Az osztlyok azonostjt nagybetvel kezdjk. (Szemly, Alakzat)
A vltozk s metdusok azonostjt kisbetvel kezdjk. (sebessg, darab)
A konstansokat csupa nagybetvel rjuk. (ALAPAR, NYUGDIJKORHATAR)
Az azonostkat gy tagoljuk, hogy az sszetett szavak kezdbetit nagybetvel, a
tbbit kisbetvel rjuk. (maxSebessegHatar)
5.3.2.2.2. Kulcssz
Olyan karaktersorozat, amelynek az adott nyelv tulajdont jelentst, s ez a jelents a
programoz ltal nem megvltoztathat.
A Java kulcsszavai a kvetkezk:
abstract
default
if
package
transient
boolean
do
implements private
try
break
double
import
protected
void
byte
else
instanceof public
volatile
case
extends
int
return
while
catch
final
interface
short
synchronized
char
finally
long
static
this
class
float
native
super
throw
continue
for
new
switch
throws
A const s a goto szintn foglalt sz, de nincs implementlva, egyik sem hasznlatos.
5.3.2.3. Cmke
A vgrehajthat utastsok megjellsre szolgl, brmely vgrehajthat utasts
megcmkzhet. Azrt alkalmazzuk, hogy a program egy msik pontjrl hivatkozni tudjunk
r.
A cmke egy azonost, az utasts eltt ll kettsponttal elvlasztva.
Szintaktika:
cimke: {

}, vagy cimke: utasts

28

A cmkt a break vagy a continue paranccsal egytt hasznljuk gy, hogy


megadjuk a parancs utn azt, hogy melyik egysgre vonatkozik.
Plda:

5.3.2.4. Megjegyzsek
A megjegyzs olyan programozsi eszkz, amely arra szolgl, hogy a program rja a kd
olvasjnak valamilyen informcit szolgltasson.
A megjegyzst a forrsszvegben hromfle mdon helyezhetjk el:
//-tl sorvgig megjegyzs.
/*
/**

*/ zrjelek kztt tetszleges hosszan.


*/ dokumentcis megjegyzs. A fejlesztkrnyezet segtsgvel

automatikusan lehet generlni hypertext (HTML) dokumentcit, ami felhasznlja


a dokumentcis megjegyzseket is. (Run > Generate Javadoc (Projekt nv))
Plda a megjegyzsekre:

29

5.3.2.5. Literlok
A literl olyan programozsi eszkz, amelynek segtsgvel fix, explicit rtkek pthetk be
a program szvegbe. Kt komponense van: tpus s rtk.
Fajti:

egsz: egy pozitv vagy negatv egsz szm, vagy nulla.(pl. +200, -3, 1256987)
vals: egy tizedesekkel lerhat szm. Kt formban adhat meg: tizedes forma s
lebegpontos forma (pl. 6.32, 100.0, 0.0006, 6.3E2, 5E-4)
logikai: kt logikai konstans ltezik, a true (igaz) s a false (hamis).
karakter: egy unicode karakter (szimpla aposztrfok kz tesszk). (pl. 'a', 'B')
szveg: akrmilyen hossz, unicode karakterekbl ll sorozat (idzjelek kz
tesszk). (pl. Szia)
null

5.3.2.6. Vltoz
A programok adatokon vgeznek klnfle manipulcikat, ezek az adatok a program futsa
alatt vltoztatjk rtkket. A kezdeti adatokat a program eltrolja a vltozkba, az rtkek az
algoritmusnak megfelelen mdosulnak a program futsa folyamn. Az algoritmus vgn a
vltoz a vgeredmny rtkvel rendelkezik. A vltoz olyan adatelem, amely azonostval
van elltva. Az egyik legfontosabb programozsi eszkznk.
A vltozkat hasznlat eltt deklarlni kell. Ez azt jelenti, hogy meg kell adni a
tpust, nevt, esetleg rtkt is. Amikor egy vltoznak kezdeti rtket adunk, akkor a
vltozt inicializljuk.
pl. byte a; int x = 0;
Egy vltozt a program tetszleges rszn deklarlhatunk.
A vltoz rvnyessgi tartomnya a programnak az a rsze, ahol a vltoz
hasznlhat. A vltozdeklarci helye hatrozza meg az rvnyessgi tartomnyt.
A vltoz lehet (a deklarls helytl fggen.):

30

tagvltoz: Az osztly vagy objektum rsze, az osztly egszben lthat


(alkalmazhat). Az osztlyvltozk deklarlsnl a static kulcsszt kell
hasznlni.
loklis vltoz: Egy kdblokkon bell alkalmazzuk. A lthatsga a deklarci
helytl az t krlvev blokk vgig tart.
A metdusok formlis paramterei az egsz metduson bell lthatk.
A kivtelkezel paramterek hasonlk a formlis paramterekhez.
Plda a vltozkra:

A vltozt lehet vglegesen is deklarlni (konstans vltoz), a vgleges vltoz rtkt nem
lehet megvltoztatni az inicializls utn.
A vgleges vltozk deklarcinl a final kulcsszt kell hasznlni:
pl. final int aKonstans = 0;
5.3.3. NYELVI ESZKZK
5.3.3.1. Kifejezsek (operandusok s opertorok)
A kifejezsek szintaktikai eszkzk, arra valk, hogy a program egy adott pontjn ismert
rtkekbl j rtkeket hatrozzunk meg. Kt komponense van: tpus s rtk.
Ktfle feladata van: vgrehajtani a szmtsokat, s visszaadni a szmts
vgeredmnyt.
sszetevk:
Operandusok: Az rtket kpviselik. Lehet literl, nevestett konstans, vltoz
vagy fggvnyhvs az operandus.
Opertorok: Mveleti jelek (pl. *, /, +, -).
Kerek zrjelek: A mveletek vgrehajtsi sorrendjt befolysoljk.

31

Plda a kifejezsre:

sin(0)

Operandus

Opertor

Operandus

Attl fggen, hogy egy opertor hny operandussal vgez mveletet, beszlhetnk:
egyoperandus (unris pl. (+2)),
ktoperandus (binris pl. (2+3)) vagy
hromoperandus (ternris pl. (a*b*c)) opertorokrl.
5.3.3.1.1. Opertorok:
(Az operanduson hajtanak vgre egy mveletet.)
5.3.3.1.1.1. Aritmetikai opertorok: Alapvet matematikai mveletek vgzsre hasznljuk
ket.
+

(sszeads),

(kivons),

(szorzs),

(oszts),

(maradkkpzs).

Plda az aritmetikai opertorok hasznlatra:

32

Implicit konverzi: Amikor egy aritmetikai opertor egyik operandusa egsz, a msik
pedig lebegpontos, akkor az eredmny is lebegpontos lesz. Az egsz rtk implicit mdon
lebegpontoss konvertldik, mieltt a mvelet vgrehajtdna.
Plda: Egy egsz szmot osztunk egy vals szmmal, a vgeredmny automatikusan
vals lesz.

A konverzit ki is knyszerthetjk explicit konverzival. A programoz ebben az


esetben a kifejezs rtkre rerltet egy tpust.
Szintaxis:
(<tpus>) <kifejezs>
Plda:
6/4

>>

eredmny: 1

(double) 6/4

>>

(Itt kt egsz szmot osztottunk egymssal.)


eredmny: 1.5

5.3.3.1.1.2. Relcis opertorok: sszehasonltanak kt rtket, s meghatrozzk a kztk


lv kapcsolatot.
>

(nagyobb),

>=

(nagyobb vagy egyenl),

<

(kisebb),

<=

(kisebb vagy egyenl),

==

(egyenl),

!=

(nem egyenl).

33

Plda a relcis opertorok hasznlatra:

5.3.3.1.1.3. Logikai opertorok:


&&

(logikai s),

||

(logikai vagy),

(logikai nem),

&

(bitenknti s),

(bitenknti vagy),

(bitenknti nem),

(Bitenknti tagads (negci)).

Plda a logikai opertorok hasznlatra:

34

5.3.3.1.1.4. Lptet opertorok: A lptet opertorok bitmveleteket vgeznek, a kifejezs


els operandusnak bitjeit jobbra vagy balra lptetik.
<<

(op1 << op2; op1 bitjeit op2 rtkvel balra lpteti, jobbrl nullkkal tlti fel)

>>

(op1 >> op2; op1 bitjeit op2 rtkvel jobbra lpteti, balrl a legnagyobb helyrtk
bitet tlt fel)

>>>

(op1 >>> op2; op1 bitjeit op2 rtkvel jobbra lpteti, balrl nullkkal tlt fel)

5.3.3.1.1.5. rtkad opertorok


=

Alap rtkad opertor, arra hasznljuk, hogy egy vltozhoz rtket

rendeljnk.
Rvidtett rtkad opertorok:

+ =, - =, * =, / =, % =, & =, | =, ^ =, << =,

>> =, >>> = (pl. i = i + 1; rvidtve: i + = 1;)


Plda az rtkad opertorok hasznlatra:

5.3.3.1.1.6. Egyb opertorok:


?:

Feltteles opertor

[]

Tmbkpz opertor

Minstett hivatkozs

new

j objektum ltrehozsa

A kifejezs alakja lehet:


prefix: Az opertor az operandusok eltt ll (* 2 5).
infix: Az opertor az operandusok kztt ll (2 * 5).
postfix: Az opertor az operandusok mgtt ll (2 5 *).
Azt a folyamatot, amikor a kifejezs rtke s tpusa meghatrozdik, a kifejezs
kirtkelsnek nevezzk. A kirtkels sorn adott sorrendben elvgezzk a mveleteket,
elll az rtk s hozzrendeldik a tpus.

35

A Javban a kvetkez mdon megy vgbe a kirtkels:


Zrjelezssel meghatrozhatjuk, hogy egy kifejezs hogyan rtkeldjn ki.
pl. (x + y) / 2 Elszr a zrjelben szerepl kifejezs hajtdik vgre.
Ha nem jelezzk, hogy milyen sorrendben akarjuk az sszetett kifejezst
kirtkelni, akkor a sorrendet az opertorok precedencija fogja meghatrozni. A
magasabb precedencival rendelkez opertorok hajtdnak vgre elsknt.
Pl. x + y / 2 Ebben a kifejezsben, mivel az oszts precedencija magasabb,
mint az sszeads, ezrt elszr ez hajtdik vgre, majd az sszeads kvetkezik. A
kvetkez kifejezs egyenrtk vele: x + (y / 2).
Opertor precedencia szintek:
postfix

expr++ expr--

unris

++expr --expr +expr -expr ~ !

multiplikatv

* / %

additv

+ -

lptets

<< >> >>>

relcis

< > <= >= instanceof

egyenlsg

= = !=

bitenknti s

&

bitenknti kizr vagy

bitenknti vagy

logikai s

&&

logikai vagy

||

feltteles

?:

rtkads

= += -= *= /= %= &= ^= |= <<= >>=


>>>=

36

A tblzat a Java platformon hasznlt opertorok precedencia szintjeit mutatja be. Az


opertorok precedencia szint szerint vannak rendezve, mgpedig gy, hogy legfell a
legnagyobb precedencij, legalul a legkisebb precedencij tallhat. Az azonos szinten
elhelyezked opertorok azonos precedencival rendelkeznek. Ha azonos precedencij
opertorok szerepelnek egy kifejezsben, akkor balrl jobbra trtnik a vgrehajts, kivve az
rtkad opertorokat, amelyek jobbrl balra hajtdnak vgre.
Azt a kifejezst, amelynek rtke fordtsi idben eldl, konstans kifejezsnek
nevezzk. Ltrehozsra a final mdostt hasznljuk, gy rjk el, hogy az adattag rtkt
nem vltoztathatja meg senki.
pl. final double PI=3.14;: Pi rtkt jelenti.
5.3.3.2. Deklarcis s vgrehajthat utastsok
A deklarcis utastsok mgtt nem ll trgykd. A programoz a nvvel rendelkez sajt
programozsi eszkzeit tudja deklarlni.
pl. int i=10;
A vgrehajthat utastsokbl generlja a fordt a trgykdot.
Melyek ezek?
res utasts (pl. ;)
Kifejezs utasts (pl. 8;

a = b;)

Vezrl utastsok (szekvencia, feltteles utasts, tbbszrs elgaztats,


ciklusok, vezrlstad utastsok)
Mdszerhvsok (metdushvsok)
Objektumot ltrehoz kifejezsek
5.3.3.3. Alprogramok
A programot clszer kisebb egysgekre (alprogram) bontani, melyeket a program bizonyos
pontjairl aktivizlhatunk. gy ttekinthetbb, olvashatbb vlik a forrsprogram, valamint
a tbbszr elfordul tevkenysgeket elegend egyszer megrni (elkszteni).
A Javban metdusnak nevezzk az alprogramot. A metdus utastsok sszessge,
melyet meghvhatunk a metdus nevre val hivatkozssal.

37

Egy metdus lehet eljrs vagy fggvny aszerint, hogy van-e visszatrsi rtke.
5.3.3.3.1. Eljrs
Az eljrsnl nincsen visszatrsi rtk, egyszeren vgrehajtdik az eljrs nevre val
hivatkozssal. A vgrehajts utn a program azzal az utastssal folytatdik, amelyik az
eljrst meghv utastst kveti. Az eljrs visszatrsi tpusa void (semleges), ami azt
jelenti, hogy a visszatrsi tpus nincs definilva.
Plda az eljrsra:
(Az eljrs egy vonalat rajzol a kpernyre.)

5.3.3.3.2. Fggvny
A fggvnynl van visszatrsi rtk. Fggvnyt is egyszeren a nevre val hivatkozssal
hvunk meg, de visszaad egy rtket, melyet a fggvny neve kpvisel.
Plda a fggvnyre:
(A fggvny megduplzza az x vltoz rtkt.)

38

5.3.3.4. Blokk
A blokk nulla vagy tbb utasts kapcsos zrjelek kztt, amely hasznlhat brhol, ahol az
nll utastsok megengedettek.
Jellemzi:
{ } zrjelek kztt szerepel.
Cmkzhet.
Tetszleges mlysgben egymsba skatulyzhat.
A vltoz a blokk loklis vltozjaknt deklarlhat.
A blokkon bell tetszleges a deklarcis s vgrehajthat utastsok sorrendje.
5.3.4. NUMERIKUS- S EGYB ADATTPUSOK
A Java nyelvben az adattpusoknak kt fajtja van: primitv s referencia tpusok. A primitv
adattpusok egy egyszer rtket kpesek trolni: szmot, karaktert vagy logikai rtket.
Primitv tpusok:

Referencia tpusok:

Egsz tpus
Vals tpus
Karakter tpus
Logikai tpus

Tmb tpus
Osztly tpus
Interfsz tpus

5.3.4.1. Egsz s vals szmtpusok


5.3.4.1.1. Egszek
Tpus
byte
short

Lers
bjt mret egsz
rvid egsz

int

egsz

long

hossz egsz

5.3.4.1.2.
Tpus
float
double

Mret / formtum
8 bit kettes komplemens (-128 - 127)
16 bit kettes komplemens (-32768 - 32767)
32 bit kettes komplemens (-2147483648 2147483647)
64 bit kettes komplemens
(-9223372036854775808 - 9223372036854775807)

Vals szmok
Lers
Mret / formtum
egyszeres pontossg
32 bit IEEE 754
lebegpontos
dupla pontossg lebegpontos 64 bit IEEE 754

39

5.3.4.2. Egyb tpusok


Tpus
Lers
char
karakterek
boolean logikai rtk

Mret / formtum
16 bit Unicod karakter
true vagy false

5.3.4.3. Szm s szveg kztti konvertlsok


5.3.4.3.1. Szvegbl szmm konvertls
Elfordulhat, hogy a sztringknt rendelkezsre ll adatot szmknt kell kezelnnk. pl. A
szveges llomnybl beolvasott adatok sztringknt llnak a rendelkezsnkre, s ha
szeretnnk velk valamilyen matematikai mveletet vgezni, akkor t kell alaktani szm
tpusv.
Az talaktst a valueOf metdussal tudjuk elvgezni.
Plda: (Kt szveg tpus vltoz szmknt trtn sszeadsa.)

5.3.4.3.2. Szmbl szvegg konvertls


Az a helyzet is elfordulhat, hogy a szmbl szvegbe konvertlsra van szksgnk. pl. A
program ltal szolgltatott szmrtkeket szeretnnk egy szveges llomnyba kirni.
Az talaktst a toString() metdussal tudjuk elvgezni.
Plda: (Egy egsz tpus szm szmjegyeinek megszmllsa.)

40

5.3.4.4. A Math osztly


Az alapvet aritmetikai szmtsokon (+, -, /, %) tl a Java nyelv biztostja szmunkra
a Math osztlyt. Az osztly metdusai magasabb rend matematikai szmtsok elvgzst is
lehetv teszik. (pl. egy szg szinusznak a kiszmtsa.)
A Math osztly metdusai osztly metdusok, gy kzvetlenl az osztly nevvel kell
ket meghvni. pl. Math.abs(-32);
Nzzk meg a legfontosabb metdusokat!
5.3.4.4.1. Alapvet metdusok:
double abs(double)
float abs(foat)
int abs(int)
long abs(long)

abszolt rtk
A kapott paramter abszolt rtkvel tr vissza.
felfel kerekts

double ceil(double)

double floor(double)

double rint(double)

long round(double)
int round(float)

A legkisebb double rtkkel tr vissza, ami nagyobb vagy


egyenl a megkapott paramterrel.
lefel kerekts
A legnagyobb double rtkkel tr vissza, ami kisebb vagy
egyenl a megkapott paramterrel.
a legkzelebbi egszhez kerekt
A megkapott paramterhez legkzelebb ll double
rtkkel tr vissza.
kerekts
A legkzelebbi long vagy int rtket adja vissza.

double min(double,
double)
float min(float, float) A kt paramter kzl a kisebbel tr vissza.
int min(int, int)
long min(long, long)
double max(double,
double)
float max(float, float) A kt paramter kzl a nagyobbal tr vissza.
int max(int, int)
long max(long, long)
A kvetkez program bemutatja a fenti tblzatban ismertetett metdusok hasznlatt:

41

5.3.4.4.2. Hatvnyozssal kapcsolatos metdusok:


double exp(double) A szm exponencilis rtkvel tr vissza.
A szm termszetes alap logaritmusval tr
double log(double)
vissza.
double pow(double, Az els paramtert a msodik paramter
double)
rtkvel megadott hatvnyra emeli.
A megadott paramter ngyzetgykvel tr
double sqrt(double)
vissza.
A kvetkez program bemutatja a fenti tblzatban ismertetett metdusok hasznlatt:

5.3.4.4.3. Trigonometrikus fggvnyek:


double sin(double) Egy szm szinuszval tr vissza.
double cos(double) Egy szm koszinuszval tr vissza.
double tan(double) Egy szm tangensvel tr vissza.
double asin(double) Egy szm arc szinuszval tr vissza.
double acos(double) Egy szm arc koszinuszval tr vissza.
double atan(double) Egy szm arc tangensvel tr vissza.
double
A paramtert fokk konvertlja.
toDegrees(double)
double
A paramtert radinn konvertlja.
toRadians(double)

42

A kvetkez program bemutatja a fenti tblzatban ismertetett metdusok hasznlatt:

5.3.4.4.4. Vletlen szm kszts:


Gyakran szksgnk van vletlen szmok ellltsra, ezt a double

random()

metdussal tehetjk meg. A metdus egy vletlen szmot ad [0.0;1.0] intervallumban.


Plda:(Generljunk egy vletlen egsz szmot 1-tl 10-ig terjed intervallumban.)

Figyeljk meg a bekeretezett kifejezst!


A random() metdus 0 s 1 kztti double tpus szmot llt el gy, hogy a 0-t igen, de
az 1-t soha nem veszi fel. Mi 1 s 10 kztti egsz szmot szeretnnk, ezrt a vletlen szmot
meg kell szorozni 10-el s mg hozz kell adni 1-t is. Azt, hogy a vgeredmny egsz tpus
legyen ki kell knyszertennk (int).
5.3.5. KARAKTERES ADATTPUSOK
Karaktereket definilhatunk egyszeren a char tpus segtsgvel, (pl. char a='a';) de
ltrehozhatunk karakter objektumokat is.
5.3.5.1. A Character osztly
Az egyb tpusoknl ismertetett char tpus helyett van, amikor szksgnk van arra, hogy a
karaktert objektumknt hasznljuk, pl. amikor egy karakter rtket akarunk tadni egy

43

metdusnak, ami megvltoztatja ezt az rtket. A Character tpus objektum egyetlen


karakter rtket tartalmaz.
Ksztsnk egy karakter objektumot! pl. Character a = new Character('a');
5.3.5.1.1. A Character osztly fontosabb konstruktorai, metdusai
A Character osztly egyetlen konstruktora, amely ltrehoz
egy Character objektumot.
sszehasonlt kt Character objektumban trolt rtket.
compareTo(Character) Visszaad egy egsz szmot, ami jelzi, hogy az objektum
rtke kisebb, egyenl, vagy nagyobb, mint a
paramterben megadott rtk.
Kt karakter objektumot hasonlt ssze, true rtkkel tr
equals(Object)
vissza, ha a kt rtk egyenl.
Sztring konvertlja az objektumot. A sztring 1 karakter
toString()
hossz lesz.
charValue()
Megadja az objektum rtkt egyszer char rtkknt.
boolean
Meghatrozza, hogy az egyszer char rtk nagybet-e.
isUpperCase(char)
boolean
Meghatrozza, hogy az egyszer char rtk kisbet-e.
isLowerCase(char)
boolean
Meghatrozza, hogy az egyszer char rtk kezetes bet-e.
isLetter(char)
boolean
Meghatrozza, hogy az egyszer char rtk szmjegy-e.
isDigit(char)
boolean
Meghatrozza, hogy az egyszer char rtk szkz-e.
isSpaceChar(char)
Character(char)

A kvetkez program bemutatja a fenti tblzatban ismertetett metdusok hasznlatt:

44

A Java nyelvben hrom osztly ll rendelkezsnkre, amelyekkel trolhatunk, illetve


manipullhatunk sztringeket, ezek a String, a StringBuffer s a StringBuilder. A
StringBuilder osztllyal nem foglalkozunk. A String osztlyban olyan sztringeket
trolunk, amelyek rtke nem fog vltozni. A StringBuffer osztlyt akkor alkalmazzuk,
ha a szvegen szeretnnk mdostani.
5.3.5.2. A String osztly
5.3.5.2.1. String objektumok ltrehozsa
A String objektumok ltrehozsa ktfle mdon trtnhet:
Kszthetjk a sztringet egy sztring konstansbl, egy karaktersorozatbl.
pl. String str1 = "Ez egy szveg";
Vagy mint minden ms objektumot, a new opertorral hozhatjuk ltre.
pl. String str2 = new String ("Ez is egy szveg");
5.3.5.2.2. A karakterlnc indexelse:
Figyeljk meg a kvetkez brt!
0

S z v e g ?
Az brn egy Szveg? objektum lthat, amely egy 7 karakter hossz szveg (String). Az
els bet az S indexe 0, a v bet indexe 3, a ? karakter pedig a 6.
Figyeljnk arra, hogy az indexels nullval kezddik!
5.3.5.2.3. A String osztly fontosabb konstruktorai, metdusai:
String()
String(String value)
int length()
char charAt(int index)
String toLowerCase()

String toUpperCase()

A ltrehozott objektum az res


karakterlncot reprezentlja.
A ltrehozott objektum a paramterben
megadott szveget tartalmazza.
Visszaadja a szveg hosszt.
Visszaadja az index index karaktert.
Visszaad egy objektumot, amely az
objektum szvegnek csupa kisbets
vltozata.
Visszaad egy objektumot, amely az
objektum szvegnek csupa nagybets
vltozata.

45

String toString()

Visszaadja sajt maga msolatt.


A metdus visszaad egy karakterlncString replace(char
objektumot, amelyben minden oldChar
oldChar,char newChar)
karaktert newChar-ra cserl.
String substring(int
Visszaadja az objektum rszlnct
beginIndex)
beginIndex-tl a vgig.
String substring(int
Visszaadja az objektum rszlnct
beginIndex,endIndex)
beginIndex-tl endIndex-1-ig.
sszehasonltja az objektumot a
boolean equals(Object anObject) paramterknt megadott msik
objektummal.
sszehasonltja az objektumot a
boolean equalsIgnoreCase(String paramterl megadott msik String
str)
objektummal. A kis- s nagybet kztt
nem tesz klnbsget.
sszehasonltja az objektumot a
paramterl megkapott msik String
objektummal. A visszaadott rtk 0, ha a
int compareTo (String str)
kt objektum megegyezik. Ha a szveg
nagyobb, mint a paramter, akkor pozitv,
ellenkez esetben negatv.
sszefzi a paramterl megadott
sztringet az objektummal.
String concat (String str)
(A + opertorral is el lehet vgezni ezt a
mveletet.)
5.3.5.3. A StringBuffer osztly
A String osztllyal ellenttben a StringBuffer osztly szvege manipullhat.
A StringBuffer osztly fontosabb konstruktorai, metdusai:
StringBuffer()
StringBuffer(int length)

StringBuffer(String str)
int capacity()
int length()
char charAt(int index)
StringBuffer append(<Type> value)

A ltrehozott objektum az res


karakterlncot reprezentlja.
A ltrehozott objektum az res
karakterlncot reprezentlja, kezdeti
kapacitsa length karakter.
A ltrehozott objektum a
paramterben megadott szveget
tartalmazza.
Megadja a kezdeti kapacitst, ennyi
karakter fr az objektumba.
Megadja a szveg aktulis hosszt.
Visszaadja az index index karaktert.
Bvts, a Type itt egy osztlyt
reprezentl.

46

StringBuffer append(<type> value)


StringBuffer insert( in offszet,
<Type> value)
StringBuffer insert( in offszet,
<type> value)
StringBuffer deleteCharAt(int
index)
StringBuffer delete(int start, int
end)
StringBuffer replace(int start,
int end, String str)
StringBuffer reverse()
String substring (int start, int
end)
String substring (int start)

Bvts, a type itt egy tetszleges


primitv tpus.
Beszrs offszet pozcitl kezdve.
Beszrs offszet pozcitl kezdve.
Adott index karakter trlse a
szvegbl.
Rszlnc trlse a szvegbl, start
indextl end index-1-ig.
A start s end-1 kztti rszlnc
cserje str-rel.
Megfordtja az objektum szvegt.
Visszaad egy start s end-1 index
kztti rszlnc j String
objektumot.
Visszaad egy start indexel kezdd
rszlnc j String objektumot.

5.3.5.4. Sztringekkel vgezhet mveletek


5.3.5.4.1. Szveg hossznak meghatrozsa, adott karakterek megjelentse:
int length()

>>

Szveg hossza

Plda:
String str="Laci";
int hossz=str.length(); >>

char charAt(int index)

>>

Adott index karakter

Plda:
String str="Laci";
char c=str.charAt(0);

>>

>>

Kisbets talakts

5.3.5.4.2. Manipulls a szveggel:


String toLowerCase()

Plda:
String str="KICSI";
String kstr=str.toLowerCase();
String toUpperCase()

>>

>>

kicsi

Nagybets talakts

47

Plda:
String str="nagy";
String nstr=str.toUpperCase();

>>

NAGY

String replace(char oldChar,char newChar)


kicserlse
Plda:
String str1="Remek eme Mekk Mester";
String str2=str1.replace(e, a);
>>
Mastar

>>

Karakterek

Ramak ama Makk

String substring(int beginIndex) >>


Rszsztring kszts
String substring(int beginIndex, int endIndex)
Plda:
String str1="Plinka";
String str2=str1.substring(3);
String str3=str1.substring(0,3);

>>
>>

inka
Pl

>>

Objektumok

5.3.5.4.3. sszehasonlts (egyenlsgvizsglat):


boolean equals(Object anObject)
sszehasonltsa
int compareTo(String str)

Plda:
String str1="Laci";
String str2="Gizi";
str1.equals(str2); >>
str1.compareTo(str2)

false
>>
5

Figyelem! Az = = opertor nem az egyenlsget, hanem az azonossgot vizsglja!


5.3.5.4.4. Keress:
int indexOf(int ch)
>>
Karakter keress
int indexOf(int ch, int fromIndex)
int indexOf(String str) >>
Rszsztring keress
int indexOf(String str, int fromIndex)
Plda:
String str1="Laci";
char c = 'a';
String str2="ci";

48

str1.indexOf(a);
>>
str1.indexOf(str2;0) >>

1
2

5.3.5.4.5. Konkatenci (sszefzs):


String concat(String str)
Plda:
String str1="La";
String str2="ci";
str1.concat(str2); >>

>>

Hozzfzs

Laci

5.3.5.4.6. Bvts:
StringBuffer append(<Type|type> value) >>

Bvts a vgn

Plda:
StringBuffer szoveg = new StringBuffer("rtk");
szoveg.append("12.3"); >>
rtk12.3
StringBuffer insert(int offset,<Type|type> value)
Bvts adott pozcitl.
Plda:
szoveg.insert(5, "=");

>>

>>

rtk=12.3

5.3.5.4.7. Trls:
StringBuffer deleteCharAt(int index)
>>
karakter trlse.
StringBuffer delete(int start, int end)
trlse.

Adott index
>>

Rszlnc

Plda:
StringBuffer szoveg = new StringBuffer("Labdargs");
szoveg.delete(5,10);
>>
Labda
szoveg.deleteCharAt(0) >>
abda
5.3.6. ELGAZTAT UTASTSOK
A program ksztse sorn addnak olyan helyzetek, ahol a folyamatos utasts vgrehajts
menett meg kell trnnk, felttelektl fgg elgazsokat kell a programba beptennk. gy
tudjuk megoldani azt a feladatot, hogy ez a programrsz csak akkor kerljn vgrehajtsra, ha
arra szksg van.

49

5.3.6.1. Ktirny elgaztat (feltteles) utasts: if..else


Kt alakjban hasznlhatjuk: rvid alak, ha hinyzik az else g , egybknt hossz alakrl
beszlnk.
Szintaktika:
if(<felttel>) <utasts vagy blokk>: rvid alak
[else <utasts vagy blokk>]: hossz alak, a teljes utasts
Mkdsi elv:
Elszr kirtkeldik a felttel.
Ha igaz, akkor vgrehajtdik a felttel utni tevkenysg s a program az if
utastst kvet utastson folytatdik.
Ha a felttel nem igaz, akkor az else gban megadott tevkenysg hajtdik
vgre, majd a program az if utastst kvet utastson folytatdik. Amennyiben
nincs else g, akkor ezt egy res utastsnak vehetjk.
Plda:

5.3.6.2. Tbbirny elgaztat utasts


Ha olyan feladattal llunk szemben, hogy tbb tevkenysg kzl egyet kell kivlasztanunk,
akkor a tbbirny elgaztat utastst alkalmazzuk. A Javban ezt ktfle vezrlszerkezettel
tehetjk meg: switch..case s az else..if.
5.3.6.2.1. switch..case
Fleg akkor hasznljuk, ha egy kifejezs jl meghatrozott, klnbz rtkeire szeretnnk
bizonyos utastsokat vgrehajtani.

50

Szintaktika:
switch(<kifejezs>){
case <konstans kifejezs> : <utasts vagy blokk>
[case <konstans kifejezs> : <utasts vagy blokk>]
...
[default:<utasts v. {blokk}>]
}
Mkdsi elv:
Elszr kirtkeldik a kifejezs.
A kifejezs rtke a felrs sorrendjben sszehasonltsra kerl a case gak rtkeivel.
Ha van egyezs, akkor vgrehajtdik az adott gban megadott tevkenysg, majd
a program a kvetkez gakban megadott tevkenysgeket is vgrehajtja.
Ha nincs egyezs, akkor a default gban megadott tevkenysg hajtdik vgre.
Plda:

Output:

Ha rgtn ki szeretnnk lpni a switch utastsbl az adott tevkenysg vgrehajtsa utn,


akkor kln utastst kell alkalmaznunk (break).

51

Plda:

Output:

5.3.6.2.2. else..if
Szintaktika:
if (<felttel1>)
<utasts . blokk>
else if (<felttel2>)
<utasts v. blokk>
...
else
<utasts v. blokk>
A mkdsi elvet az albbi plda szemllteti:

52

A forrskd az elz pldban (Menu1) ismertetett vgeredmnyt szolgltatja. A kt kd


futtatsnak eredmnye egyenrtk egymssal. A programoztl fgg, hogy melyiket
hasznlja az adott feladat megoldsa sorn.
5.3.6.3. Elgaztat utastsok egymsba gyazsa
Az elgaztat utastsok tetszlegesen egymsba gyazhatk. A program ttekinthetsge
rdekben clszer a forrsprogram szerkezett jl strukturltan elkszteni. Figyeljnk a
cselleng else-re! Mit is jelent ez? Ha rvid if utastsokat runk, akkor az else
utasts vajon melyik if-hez tartozik? A Java azt mondja, hogy a legutbbi if-hez, ha csak
blokkok kpzsvel fell nem brljuk ezt. A problma msik megoldsa az, hogy mindig
hossz if utastsokat alkalmazunk.
Nzzk vgig pldkon keresztl a fent emltett eseteket!
(Azt vizsgljuk, hogy az adott szm bell van-e egy tartomnyon ([100;1000]), s ha ott van,
akkor pros vagy pratlan?)
Megtveszt kd: (Strukturlatlan, hova tartozik az else?)

A kd helyesen strukturlva:

Alaktsuk t gy, hogy az els if-hez tartozzon az else:

53

Blokk ksztsvel oldottuk meg ezt a feladatot.


Prbljuk meg hossz if-utastsokkal!

5.3.6.4. A billentyzetrl bevitt adatok vizsglata


A programok ksztse sorn gyakran kerlnk olyan feladat el, amikor a programnak a
tovbbhaladshoz szksge van a felhasznl beavatkozsra, adatokat vr a billentyzetrl.
pl. menrendszernl a felhasznl vlasztstl fggen fog a vezrls a megfelel
programrszre kerlni.
Hogyan olvassuk be az adatokat a billentyzetrl? Az adatok kezelsvel a 9. hten
fogunk foglalkozni rszletesen, most elgedjnk meg egy kis programrszlettel, aminek a
segtsgvel megoldhat a beolvass problmja.
A kdot msoljuk be a programunkba, a kvnt helyre!
Scanner sc=new Scanner(System.in);
System.out.println("Krem a szmot!");
int a=sc.nextInt();
Ne feledkezznk meg a Scanner osztly importlsrl!
Kattintsunk bal gombbal a lmpcskra s vlasszuk az Add

import

for

java.util.Scanner opcit:

54

Plda: (A program a felhasznl vlasztstl fgg darabszm csillagot jelent meg.)

5.3.7. CIKLUSSZERVEZ UTASTSOK


Ha egy bizonyos tevkenysget a programban egymsutn tbbszr vgre kell hajtani, akkor
ciklusokat alkalmazunk. A ciklusok vgrehajtst, vagy az abbl val kilpst felttelekhez
ktjk.
Egy ciklus ltalnos felptse:
fej
mag
vg
Az ismtlsre vonatkoz informcik vagy a fejben vagy a vgben tallhatk.
A magban helyezzk el azokat az utastsokat, amelyeket tbbszr vgre akarunk hajtani.
A ciklusok mkdse sorn kt szlssges esettel is tallkozhatunk:

55

res ciklus: A ciklusmag egyszer sem fut le.


Vgtelen ciklus: Az ismtlds soha nem ll le.
5.3.7.1. Elfeltteles ciklus: while
Szintaktika:
while (felttel)
<utasts v. blokk>
Mkdsi elv:
A program a ciklusba val belps eltt megvizsglja a felttelt (belpsi felttel), s ha ez
teljesl, akkor a ciklusmag vgrehajtsra kerl, egybknt nem. Ennl a ciklusfajtnl
kialakulhat res ciklus, abban az esetben, ha a belpsi felttel soha nem teljesl.
Plda: (rjunk ki a konzolra egyms mell 6 db csillagot!)

5.3.7.2. Elfeltteles ciklus: for


Szintaktika:
for (inicializls;felttel;nvekmny)
<utasts v. blokk>
Mkdsi elv:
inicializls: Itt deklarljuk a ciklusvltozt, s adjuk meg annak kezdeti rtkt.
felttel: Belpsi felttel, minden ciklus elejn kirtkeldik, ha igaz, akkor a
ciklus vgrehajtsra kerl, egybknt a vezrls a for utni utastsra ugrik.
nvekmny: Itt vltoztatjuk meg a ciklusvltoz rtkt.
Plda:

56

A for fejnek tagjai hagyhatk resen is, de a pontosvesszket ki kell tenni. pl.
for(;;)...
5.3.7.3. Vgfeltteles ciklus: do..while
Szintaktika:
do
<utasts v. blokk>
while (felttel);
Mkdsi elv:
A ciklus magja egyszer mindenkppen vgrehajtdik, majd a ciklus vgn, egy
felttelvizsglat kvetkezik, amely eldnti, hogy bent maradunk-e a ciklusban, vagy nem. Ha
a felttel igaz, akkor a ciklusmag jbl vgrehajtsra kerl. Ez a folyamat addig folytatdik,
amg a felttel hamiss nem vlik (bennmaradsi felttel).
res ciklus a vgfeltteles ciklusnl nem fordulhat el, hiszen a ciklus magja legalbb
egyszer lefut.
Plda:

Az elz hrom ciklus mindegyike ugyanazt a feladatot oldotta meg, kirajzolt 6 db csillagot a
kpernyre.
5.3.7.4. Ciklusok egymsba gyazsa
A ciklusainkat egymsba is gyazhatjuk.
Nzznk meg egy egyszer pldt kt ciklus egymsba gyazsra!
Plda: (Jelentsk meg a konzolon kvetkez alakzatot:

********************
********************
********************)

57

Forrsprogram:

A program elemzse:
A csillagok egy 3 soros, 20 oszlopos tblzatot alkotnak. A kirajzolst gy tudjuk egyszeren
elkpzelni, mintha a tblzat celliba helyeznnk el a csillagokat.
A kls ciklusban megynk vgig a sorokon, a bels ciklusban pedig az oszlopokon.
Elszr az 1. sor elemeit jelentjk meg egyms utn, majd a 2. sor elemeit, s vgl a 3. sor
kvetkezik. Ha egy teljes sort megjelentettnk, akkor meg kell oldani a sorvlts
problmjt. Ezt egyszeren egy println("") utastssal is megtehetjk.
5.3.7.5. Alapvet algoritmusok
5.3.7.5.1. Megszmlls
Ezzel az algoritmussal egy sorozat, adott tulajdonsggal rendelkez elemeit szmoljuk meg.
Az algoritmus menete a kvetkez:
1. A szmllt nullra lltjuk.
2. Vgig lpkednk a sorozat elemein, s ha az aktulis elem tulajdonsga megegyezik az
adott tulajdonsggal, akkor a szmll rtkt eggyel megnveljk.
3. Megjelentjk a szmll rtkt, ez a szm adja az adott tulajdonsggal rendelkez
elemek szmt.
Plda: (Ma st a nap. sztringben megszmoljuk az 'a' karakterek szmt.)

58

5.3.7.5.2. sszegzs, tlagszmts


Az olyan feladatokat, amelyekben a sorozat elemeit valamilyen mdon gyjtennk kell (pl.
gngylts), sszegzses feladatoknak nevezzk. Ebbe a feladatcsoportba sorolhat a
klnbsg-, illetve a szorzatkpzs is.
tlag kiszmtsakor egyszerre kt dolgot is vgznk: sszegznk, s kzben
szmllunk is. Vgl a kt rtk hnyadost vesszk.
Plda: (Addig olvassuk be a szmokat, amg 0-t nem tnk, majd rjuk ki a szmok sszegt
s tlagt!)

Figyelem: Az tlag szmtsakor vigyzni kell a 0-val val osztsra!

59

5.3.7.5.3. Minimum- s maximum kivlaszts


Minimum kivlasztsa esetn a sorozat legkisebb, maximum kivlasztsa esetn a sorozat
legnagyobb elemt kell meghatroznunk.
Az algoritmus menete a kvetkez:
1. A sorozat els elemt elhelyezzk egy minimum (maximum) vltozba.
2. Sorban vgiglpkednk az elemeken s, ha az adott elem kisebb (nagyobb) a
minimum (maximum) vltozban lvnl, akkor a vltozban lv elemet kicserljk
vele.
3. Megjelentjk a vltozban tallhat elemet, ez az elem lesz a sorozat minimuma
(maximuma).
Plda: (A program bekr 5 db vals szmot, majd megjelenti a legkisebbet!)

5.3.8. TMBK
A tmb egy olyan vltoz, amely tbb azonos tpus adatot tartalmaz. A
tmb hossza a ltrehozskor dl el, s attl kezdve a tmb egy lland
mret adatszerkezet.

60

A tmbket egy fikos szekrnyhez lehetne hasonltani, amelyben az egyes fikokban egyegy adatot helyeznk el. A fikokra a sorszmukkal (a tmbben elfoglalt helye) hivatkozunk.
A sorszmozst nullval kezdjk! Ha valamelyik fik tartalmra szksgnk van, akkor
megadjuk, hogy hnyadik fikrl van sz, s kiolvassuk a tartalmt.
Plda: (Ha szksgnk van a 100-as szmra, akkor a 3-as index fikot kell kihzni!)
0
10

1
2

2 3 4
34 100 1

5
0

6
5

7 8 9
67 76 99

Lehetsgnk van arra is, hogy olyan tmbket hozzunk ltre, amelyek tmbket
tartalmaznak (tmbk tmbjei).
5.3.8.1. Tmbk deklarlsa, kezdrtkk belltsa
A tmb deklarlsa a tbbi vltozhoz hasonlan kt rszbl ll: meg kell adni a tmb
tpust s a tmb nevt.
Szintaktika:
<elemtpus>[] <tmbAzonost>; pl. int[] szamok;
A [ ] tmbkpz opertort a tmbAzonost utn is tehetjk.
<elemtpus> <tmbAzonost>[]; pl. int szamok[];
A deklarls sorn nem hoztuk mg ltre a tmbt, egyelre csak a referencinak
(memriacmnek) foglaltunk helyet. A tmbt a Javban kln ltre kell hozzuk a new
opertorral!
Szintaktika:
new elemtpus[<mret>];
pl. new int [10];//Itt egy olyan integer tpus adatelemeket tartalmaz tmbt hoztunk
ltre, amely 10 db elemet tartalmaz.
A deklarcit s a ltrehozst egy lpsben is elvgezhetjk.
Pldul:
int szamok[] = new int[10] ;
A deklarls sorn (inicializl blokkal) a tmb elemeinek kezdeti rtkek is adhatk.
Szintaktika:
<elemtpus>[] <tmbAzonost> = {<rtk0>, <rtk1>, ...};
pl. Ksztsnk egy String tpus tmbt, amely a ht napjait tartalmazza!

61

String[] napok =
{"Htf","Kedd","Szerda","Cstrtk","Pntek","Szombat",
"Vasrnap"};
5.3.8.2. Tmbelemek elrse
A tmb egyes elemeire az indexkkel hivatkozhatunk.
Szintaktika:
<tmbAzonost>[index];
pl. szamok[3] = 2; // A 4. fikba (3-as index) betettk a 2-es szmot.
5.3.8.3. Tmb mretnek meghatrozsa
Minden tmb objektumnak van egy length konstansa, amely megadja a tmb hosszt.
(Egyszeren azt, hogy hny adat helyezhet el benne?)
tmbAzonost.length
pl. (A napok tmbnl, amely a ht napjait tartalmazza.)
System.out.println(napok.length); >> 7
5.3.8.4. Objektumtmbk
A tmbkben trolhatunk referencia tpus elemeket is. A ltrehozsuk olyan, mint a primitv
tpus elemeket tartalmaz tmbk.
Nzznk meg egy egyszer pldt, ahol a tmbben hrom String objektumot trolunk:

A tmb elemeinek a bejrshoz hasznlhatunk egy specilis programozi eszkzt, az


n. for-each ciklust.
Szintaktika:
for(<tpus> <vltoz> : <objektum>)
<utasts vagy blokk>

62

Plda:

5.3.8.5. Tmbk tmbjei


A tmbk tartalmazhatnak tmbket, tetszleges mlysgben egymsba gyazva.
Szintaktika:
Deklarls: <elemtpus>[][] ... [] <tmbAzonost>;
Ltrehozs: new <elemtpus> [mret0][mret1]...[mretn-1];
Tmb elemeinek elrse: <tmbAzonost>index0][index1]...[indexn-1]
Plda: (Egy tmbben elhelyeznk msik 3 tmbt.)

Ezt gy kpzelhetjk el a legegyszerbben, mintha egy 3 soros 2 oszlopos tblzatban


helyeznnk el az adatokat:
Egy
Kett
Hrom

Megrett a meggy.
Csipkebokor vessz.
Te leszel a prom.

rjuk ki a konzolra a tmbbl a Te leszel a prom szveget!

63

A megadott szveg a tblzat 3. sornak 2. oszlopban tallhat, az indexelse pedig a


kvetkez lesz [2] [1].
Figyelem: Ne felejtsk el, hogy az indexels 0-val kezddik!

64

5.3.9. INPUT-OUTPUT MVELETEK


5.3.9.1. Egyszer konzol I/O mveletek
Minden programozsi nyelv alapfeladatai kz tartozik a klvilggal val kommunikci,
amely a legtbb esetben az adatok olvasst jelenti egy bemeneti eszkzrl (pl. billentyzet),
ill. az adatok rst egy kimeneti eszkzre (pl. kperny, fjl). A Java nyelv az I/O
mveleteket adatfolyamokon (n. streameken) keresztl, egysgesen valstja meg. Egy
dologra kell csak figyelni, hogy bemeneti vagy kimeneti csatornt kezelnk-e. A csatornk
kezelse Java osztlyokon keresztl valsul meg, azonban ezek nem rszei a Java alap
eszkzkszletnek, ezrt importlni kell ket a java.io csomagbl [11], [12], [13].
A konzol kezelsre a Java hrom adatfolyamot biztost. Ezeket az adatfolyamokat
nem kell megnyitni vagy bezrni, e mveletek automatikusan trtnnek. A standard
adatfolyamok a kvetkezk:

standard bemenet: System.in

standard kimenet: System.out

standard hiba: System.err


A konzol I/O mveletek hasznlata esetn a java.util csomagbl importlnunk

kell a megfelel osztlyokat.


Az albbi kis egyszer program a standard be- s kimeneti konzol hasznlatt mutatja
be. A program egy egsz szmot vr a billentyzetrl, amit utna megjelent a kpernyn:

Az sc nev objektum a Scanner osztly pldnya lesz, amely osztly a beolvasshoz


a System.in (billentyzet input) paramtert hasznlja. Az egsz tpus a adattag az sc

65

pldny

nextInt()

metdusa

ltal

megkapja

bert

szmot,

standard

System.out.println() metdus pedig megjelenti a kpernyn.


Tbb szm bevitele esetn a szmok kz alapesetben szkzket kell beiktatni, amely
jel a Java-ban fellbrlhat. Az albbi program az elz tovbbfejlesztse. Tbb (akrhny!)
egsz szmot vr vesszvel elvlasztva a billentyzetrl, majd kirja a darabszmukat s
az sszegket:

Ebben az esetben a teljes input sort beolvassuk a sor nev stringbe, majd a osztly
segtsgvel a megadott hatroljel mentn adategysgekre (tokenekre) feldarabolva
feldolgozzuk azt. Nzznk egy programfutsi eredmnyt is:

5.3.9.2. Karakteres fjlok kezelse


A Java a fjlokat is streamknt kezeli, ezrt most is importlni kell a java.io csomag
nhny osztlyt. Az I/O tpusok karakteresek (a Java az UTF-8-as Unicode
karakterkdolst hasznlja) s binrisak (8 bites bjtformtum) lehetnek. A karakteres
llomnyok kezelst hrom f rszre osztjuk:

megnyits

mveletek

lezrs

66

A megnyits mvelete sorn valamely stream osztly objektuma jn ltre


(pldnyostssal), amelyhez hozzrendeljk a megnyitand llomnyt. A fjlkezel
mveleteket try-catch-finally kivtelkezel blokkszerkezetbe kell foglalni, mert sok
problma addhat hasznlatuk sorn (pl. nem ltez llomny, betelt httrtr, stb.). A
kvetkez pldaprogramok mindegyikben lesz ilyen szerkezet, de a jobb ttekinthetsg
miatt e forrskdok csak a minimlisan ktelez kivtelkezelst tartalmazzk. A
kivtelkezelsrl bvebben a 14. heti tananyagban lesz sz.
5.3.9.2.1. Karakteres fjlok olvassa
Karakteres llomnyok olvassra a FileReader osztly read() metdusa ll
rendelkezsre. A metdus hasznlathoz implementlni kell a FileNotFoundException
(a fjl nem tallhat) kivtelkezel osztlyt, s ennek st, az IOException (ltalnos I/O
hiba) osztlyt is.
A kvetkez plda egy szveges llomnybl egyenknt beolvassa a karaktereket,
majd megjelenti ket a kpernyn. Ha nem jellnk ki pontos elrsi utat, akkor a fjlnak a
Java projekt fknyvtrban kell lennie. A fjl vgt a -1-es rtkkel rzkeli a read()
metdus.

A forrsllomny (szveg.txt) az UTF-8-as Unicode kdols szveg mentst is


lehetv tev Jegyzettmb programmal kszlt. A 2. s 3. sorban hasznlt kis- s nagybets
tesztszvegben (rvztr tkrfrgp) minden magyar kezetes bet szerepel, gy
knnyen ellenrizhet a fjlkezel metdusok bethelyes mkdse. A forrsllomny
Jegyzettmb ltal mutatott tartalma:

67

A kpernyn megjelen szveg:

5.3.9.2.2. Karakteres fjlok rsa


Karakteres llomnyok

rsra a FileWriter osztly write()

metdusa ll

rendelkezsre. Ehhez a metdushoz az IOException (ltalnos I/O hiba) osztlyt ktelez


implementlni.
Az albbi program egy string tpus vltozban trolt ktsoros szveget
karakterenknt feldolgozva r ki egy szveges llomnyba. Ha nem jellnk ki pontos
elrsi utat, akkor a fjl a Java projekt fknyvtrban jn ltre. Mivel knnyen lekrdezhet
a string hossza, a karakterek feldolgozsa nem okoz gondot.

Nzzk a ltrejtt llomny (ments.txt) tartalmt! Szerencsre a fjlba rs


karakterkdolsval semmi gond, s a Jegyzettmb is helyesen jelenti meg:

68

5.3.9.3. Binris fjlok feldolgozsa


A binris adatokat tartalmaz llomnyok kezelst a FileInputStream s a
FileOutputStream osztlyok biztostjk. Mindkt osztlyt importlni kell a java.io
csomagbl. Metdusaik a szoksos read(), write() s close(). Hasznlatuk hasonl a
karakteres llomnyoknl ltottakhoz.
Hozzunk ltre egy binary.dat nev binris llomnyt! Bjtjainak rtke
decimlisan 65-tl 90-ig terjedjen!

Bvtsk elz programunk Main metdust! A keletkezett llomnyt olvassuk be, s


rjuk ki a bjtjai ltal reprezentlt karaktereket a kpernyre szkzzel elvlasztva! Ne
feledjk, hogy az importl utastsokat bvteni kell a java.io.FileInputStream
osztllyal!

69

A kpernyn a vrt eredmny lthat:

5.3.9.4. Szveges llomnyok kezelse


Szveges llomnyok feldolgozsa gyakran nem karakterenknt, hanem nagyobb rszenknt,
pl. soronknt trtnik. Ehhez a Java n. pufferelt fjlkezelsi tmogatst nyjt. Kln
osztlyok tmogatjk a byte- s string-szint mveleteket:
Byte-szint osztlyok:

BufferedInputStream (olvass)

BufferedOutputStream (rs)

PrintStream (rs)

String-szint osztlyok:

BufferedReader (olvass)

PrintWriter (rs)
Szmunkra most a stringek kezelse fontosabb, ezrt nzznk r egy egyszer pldt!

rjunk ki egy sima szveges llomnyba (text.txt) nhny UTF-8-as kdols sort, majd
az llomnyt visszaolvasva jelentsk meg azokat a kpernyn is! rs a PrintWriter
osztly println() metdusval:

70

Olvass a BufferedReader osztly readLine() metdusval:

Figyeljk meg, hogy a BufferedReader osztly nem tud egy fjlt kzvetlenl
megnyitni, hanem csak a FileReader osztly egy pldnyt. Az eredmny meggyz:

5.3.9.5. llomnyok kzvetlen elrse


Az elz alfejezetek adatfolyam-kezel mveletei mind soros hozzfrsek voltak, teht az
llomnyok rsa ill. olvassa az elejktl a vgkig sorban trtnt. Azonban lehetsg van
arra is, hogy egy fjl tartalmhoz kzvetlenl is hozzfrhessnk. Ezt a java.io csomag
RandomAccessFile osztlya biztostja. Ez az osztly egyszerre alkalmas olvassra s
rsra is, csupn a pldnyosts sorn egy paramterrel jelezni kell, hogy milyen mveletet
kvnunk alkalmazni az objektumra:

csak olvass: RandomAccessFile("input.txt", "r")

olvass+rs: RandomAccessFile("input.txt", "rw")


Az gy megnyitott llomnyokon hasznlhatk a szoksos read() s write()

metdusok, valamint a kzvetlen elrst tmogat metdusok:

void seek(long pos): megadott pozcira ugrs a fjl elejtl

int skipBytes(int n): aktulis pozci mozgatsa n bjttal

long getFilePointer(): aktulis pozci lekrdezse

71

Fontos tudni, hogy a read() s write() metdusok meghvsa a fjlmutat


(aktulis pozci a fjlon bell file pointer) rtket automatikusan megnveli 1 egysggel,
teht nem szksges manulisan lptetni. Ezek a metdusok s a close() (fjl bezrsa) is
megkvetelik az IOException kivtelkezel osztly hasznlatt.
Hozzunk ltre egy llomnyt (random.txt), amely az angol ABC nagybetit
tartalmazza!

Majd minden tdik karaktert a fjlban elfoglalt pozcijukkal egytt jelentsk


meg a kpernyn!

A raf.length() metdussal lehet lekrdezni a fjl mrett. Figyeljk meg, hogy a


kirs sorn a getFilePointer() pozcilekrdez metdus megelzi az olvas
metdust, gy a helyes rtket adja, de mgis meg kell nvelni az rtkt 1-gyel, mivel a
pozcik szmozsa 0-tl kezddik. Az eredmny:

72

A kimenet utols sort az albbi kiegszts lltja el. A fjl minden tdik karaktert
cserljk le annak kisbets vltozatra, majd jelentsk meg a fjl sszes karaktert!

A betcsert vgrehajt ciklus minden tdik betre pozcionl, majd az ott tallhat
bet kdjhoz 32-t adva ri el, hogy kisbet lesz belle. A kiolvass eltolja az aktulis
pozcit, ezrt szksges visszalpni egyet. A betk kpernyn val megjelentst megelzi a
fjl kezdpozcijba ugrs, majd egy sima (fjlvgjel-figyelses) feldolgoz ciklus kirja a
karaktereket.

73

5.3.10. RETTSGI FELADATOK MEGOLDSA


Az albbiakban kt emelt szint rettsgi feladatot fogunk megoldani. Az eddig tanultak
elegend nyelvi eszkzt biztostanak minden rszfeladat megoldshoz [6]. Nagyban
megknnyti a munknkat az a fontos krlmny, hogy sem az inputllomnyok, sem a
felhasznl ltal bevitt adatok helyessgt ill. rvnyessgt nem kell ellenrizni. gy
lnyegesen cskken a kdolsi id, de meg kell jegyezni, hogy a valsgban az ilyen
programok hasznlhatsga nagyban korltozott.
A feladatok megoldsa fjlmveleteket is ignyel, amelyek metdusai megkvetelik a
kivtelkezelst, ezrt a programok main metdusnak fejben a throws IOException
zradkkal a kivteleket tovbbdobjuk a Java futtat rendszere fel [7].
5.3.10.1. Foci
Els rettsgi feladatunk lnyege a kvetkez: egy labdarg-bajnoksg mrkzseinek
adatait tartalmaz fjlt kell feldolgoznunk, s az adatok alapjn a megadott krdsekre
vlaszolnunk.
Mint majd ltjuk, a program sok metdusa ignyli a java.io s a java.util
osztlyok alosztlyait, amelyek alaprtelmezsben nincsenek implementlva, ezrt a program
elejn importlnunk kell ket:

1. feladat:
Olvassuk be a meccs.txt fjlban tallhat adatokat! Trolsukra kt tmbt fogunk
hasznlni, mivel az adatok egy rsze egsz szmokat, msik rsze szveget tartalmaz.
Alkalmazzuk a tmb a tmbben mdszert, mivel adategysgenknt (az inputfjl egy-egy
sora) 5 szm- s 2 szvegadat trolsrl kell gondoskodnunk. A tmbket statikus
osztlyvltozkknt definiljuk, mivel a ksbbiekben egy sajt metdussal MaxMin()
fogunk hivatkozni rjuk.

74

A megolds a mrkzsek szmnak beolvassval kezddik, majd soronknt


feldolgozzuk az inputfjlt. Ez a StringTokenizer osztly metdusainak segtsgvel (a
sort a szkzk mentn feldarabolva) knnyen megvalsthat. Figyeljk meg, hogy a
tmbk indexelse 0-tl kezddik!

A nextToken() metdus stringet ad vissza, ezrt a szmoknl a konvertlshoz


ignybe kell venni az Integer osztly parseInt() metdust.
2. feladat:
Egy fordul sorszmt bekrve rjuk ki a kpernyre az adott fordul mrkzseinek adatait a
megadott formban.

75

A billentyzet inputhoz jl hasznlhat a Scanner osztly. A kirs formtumnak


belltsa aprlkos munkt ignyel, de szerencsre a System.out.println() metdus
tmogatja a szm- ill. szvegvltozk vegyes hasznlatt.
3. feladat:
Azokat a csapatokat (s a fordul sorszmt) kell kiratni a kpernyre, amelyek
megfordtottk a mrkzs llst, teht a flidben mg vesztsre llva a mrkzst a vgn
megnyertk.

Az sszetett felttelvizsglat oka az, hogy mind a hazai-, mind a vendgcsapat


szempontjbl meg kell vizsglnunk a mrkzsek flidei- s vgeredmnyt.
4. feladat:
Egy csapat nevt kell bekrni a felhasznltl, majd (ez esetben egy csn vltozban)
eltrolva felhasznlni a kvetkez feladatok megoldshoz.

5. feladat:
Az adott csapat ltal ltt s kapott glokat kell sszestve megjelenteni, teht a lekrdezs
szrfelttele a csapat neve. Ne feledjk, hogy egy csapat hazaiknt s vendgknt is
szerepelhet egy mrkzsen, s csak a mrkzsek vgeredmnyt kell sszesteni!

76

Figyeljk meg a string

matches() metdust! Nagyon jl hasznlhat

sszehasonltsokhoz.
6. feladat:
Feladatunk az adott csapatrl meghatrozni, hogy otthon melyik fordulban kapott ki elszr,
s ki volt a legyzje. Azt is jelezni kell, ha veretlen maradt.

A mrkzsek adatait tartalmaz tmbk feldolgozst vgz while ciklus csak


addig fut, amg nem tall egy otthoni veresget az adott csapatnl. Ezt a kikapott nev logikai
vltoz hasznlatval rjk el.
7. feladat:
Statisztikt kell ksztennk a bajnoksgban elfordul vgeredmnyekrl, amelyet egy
fjlban kell eltrolnunk. Fontos felttel, hogy a fordtott eredmnyeket egyezknek kell
tekinteni s a nagyobb szmot mindig elre kell rni.

77

A feladat megoldshoz rdemes rni egy sajt metdust, amely a vgeredmnyek


glszmbl egy olyan szmot llt el, amelynek tzes helyirtkt a nagyobb-, egyes
helyirtkt pedig a kisebb glszmok adjk. gy a vgeredmnyeket egysgestve sokkal
knnyebb a feldolgozsuk.

A vgeredmnyek szmnak trolsra a T1 tmb egy res oszlopa szolgl. A tmb az


sszes vgeredmny-fajtt tartalmazza, teht kln adatstruktrt nem szksges ltrehozni
hozzjuk. Az algoritmus lnyege az, hogy az egyes vgeredmnyeket fggetlenl attl,
hogy milyen sorrendek (pl. 2-1 vagy 1-2) az els eredmny-elforduls helyn trolva
szmlljuk meg. A kimeneti fjl ltrehozshoz kivlan alkalmas az egyszeren hasznlhat
PrintWriter osztly.

Figyeljk meg a msodik begyazott for ciklus felptst, amely az eredmnyek


eltrolst vgzi! Mindig csak addig fut a tmb elejtl kezdve a vizsglatot , amg nem
tall egy olyan vgeredmnyt, mint amilyet el akar trolni. A kiratsnl arra kell figyelni,
hogy a teljes tmbt fel kell dolgozni, mivel egy eredmny akr a tmb utols sorban is
szerepelhet! A glszmok sorrendhelyes megjelentshez a Math osztly max() s min()
fggvnyei hathats segtsget nyjtanak.
sszessgben a feladatrl elmondhat, hogy br egyszer fjlkezel mveleteket
ignyel, de nhny rszfeladata magabiztos algoritmizl kpessget felttelez, s az adatok
trolshoz a tmb adatstruktra alapos ismerete felttlenl szksges.

78

5.3.10.2. Robot
Msodik feladatunk egy kis robot programozsrl szl. Ngy irnyba tud mozogni az
egybets gtjakat, mint irnyokat jell E, D, K s N parancsok hatsra. Feladataink az
ilyen utastsokbl ll programsorok feldolgozsval kapcsolatosak.
Most is szksgnk van az io s util osztlyokra, valamint egy szmrtk
formzott megjelentse miatt a DecimalFormat osztlyra is:

1. feladat:
Els lpsknt olvassuk be a Program.txt llomnyt! Els sora a programok szmt
tartalmazza, a tbbi sor pedig egy-egy programot. Utbbiakat egy egyszer string tpus P
tmbben troljuk.

2/a. feladat:
Az sszetett feladat egy utastssor szmnak bekrsvel kezddik, majd el kell dntennk
az adott sorrl, hogy egyszersthet-e. Akkor egyszersthet, ha kzvetlenl egyms utn
kt olyan lps van elrva, amelynek eredmnyekppen a robot egy helyben marad (pl. ED,
NK). A krdses betprok megtallshoz a string contains() metdust hasznljuk fel,
amely igaz rtket ad, ha betprok brhol elfordulnak a vizsglt stringben.

79

2/b. s 2/c. feladat:


Ezt a kt rszfeladatot rdemes egyszerre megoldanunk, mert mindkett ugyanazt a ciklust
ignyli az utastsok feldolgozsa sorn, gy futsi idt takarthatunk meg.
A b. feladatban azt kell meghatroznunk, hogy a kivlasztott utastssor vgrehajtsa
utn legkevesebb hny lpsben lehetne a robotot a kiindulsi helyre visszajuttatni. Ehhez
rdemes a lpseket lejtszani gy, hogy kzben kln szmoljuk a kt tengelyen (szakdl ill. kelet-nyugat) megtett lpseket (ed s kn vltozk). Az egyik lpst pozitv, az
ellenttes irny prjt negatv rtkkel vesszk figyelembe. A vgpozcit elfoglalva az
sszestett lpsszmok abszolt rtke adja a megoldst.

A c. pont arra kvncsi, hogy hny lps utn kerlnk a kiindulsi ponttl a
legtvolabbra, s ekkor mennyi ez a tvolsg. Utbbi meghatrozshoz a Pitagorasz-ttelt
hasznljuk fel, s az eredmnyt vals szmtpus vltozban troljuk.

80

Figyeljk meg, hogy a ngyzetgykvon- s a hatvnyoz fggvnyek a Math osztly


metdusai! Az eredmny kirsnl formzott megjelentst kell alkalmaznunk, amelyet a
DecimalFormat osztly format() metdusa biztost. A maszk # s 0 jele egy-egy
szmjegyet jell, s az utbbi ktelez megjelentst r el. gy lehet 3 tizedes pontossg
szmot kiratni.

3. feladat:
A

kis

robot

tevkenysgei

(elinduls,

lps,

irnyvlts)

klnfle

mrtk

energiafelhasznlssal jrnak. Meg kell hatroznunk, hogy mely programok vgrehajtsa


ignyel maximum 100 egysgnyi energiafelhasznlst.

81

Figyeljk meg, hogy minden program rendelkezik egy fix energiaignnyel, ami az
indulsbl s a megtett lpsek szmbl addik. Ezeken kvl mr csak az irnyvltsokat
kell figyelni, amit kt szomszdos utasts klnbzsgbl knnyen meghatrozhatunk. Az
utastssor egy-egy elemt a String osztly charAt() metdusval knnyen
meghatrozhatjuk. Mivel mindig az aktulis utasts kdjt hasonltjuk a sorban
kvetkezhz, gy a feldolgoz ciklus csak az utols eltti elemig fut!
4. feladat:
j formtumra kell alaktanunk s egy fjlba kirnunk az utastssorokat. A konverzi
lnyege az, hogy az egyms utn ismtld parancsokat azok szmval jellve rvidtsnk az
utastssoron. Pl. az EEEDKNNNN sorbl lltsuk el a 3EDK4N (hivatalos nevn
futshossz-tmrts) utastssort. Az egyedli utastsokat vltozatlanul kell lerni.

A kimeneti fjl ltrehozsra a PrintWriter osztly most is kzenfekv megolds.


Az tkdols menete viszont mr nem olyan egyszer! Hozzunk ltre minden utastssorbl
egy technikai sort, amely egy * karakterrel val kibvtssel jn ltre. Ez ahhoz kell, hogy a
kvetkez a vizsglatot a 2. karaktertl indt! ciklus az adott karaktert az elzhz
hasonltva megszmllhassa (az usz vltozban) az egyms utn kvetkez azonos
utastskaraktereket.

82

5. feladat:
A cl egy j formtum utasts visszaalaktsa a rgi formtumra. A visszakdoland
utastssort a felhasznltl krjk be, amelyet az uts vltozban helyeznk el. Figyelnnk
kell arra is, hogy az ismtldsek szma maximum 200 lehet, azaz akr 3 szmjegybl is
llhat! Ez a krlmny alapveten meghatrozza az talakt algoritmus felptst, ugyanis
az ismtldsszmot ad karaktereket is gyjtennk kell (ism_kar vltoz).

Figyeljk meg, hogy az utastssor elemeinek darabolshoz a charAt() helyett a


substring() metdust hasznljuk, ugyanis az utbbinak van egy olyan matches()
metdusa, amely segtsgvel nagyon tmr kddal eldnthetjk, hogy az adott karakter
utastskd-e. A maszkban szerepl | jel a logikai vagy megfelelje. A szveg-szm
konverzihoz most is az Integer osztly parseInt() metdust hasznljuk. Abban az
esetben, ha az ismtldsek szma nulla, akkor gondoskodnunk kell arrl, hogy 1 legyen,
mivel a kir programrsz ciklusnak legalbb egyszer le kell futnia az utastskarakter
megjelentshez. A 200-as hatr vizsglathoz gyors, knyelmes s elegns megoldst knl
a Math osztly min() fggvnye.

83

5.3.11. AZ OBJEKTUM-ORIENTLT PARADIGMA


5.3.11.1. Osztly s objektum, konstruktor
A Java nyelv alapjt az objektum-orientlt paradigma (mdszer, alapelv, elmlet) kpezi. Ez
azt jelenti, hogy a korbbi programozsi nyelvek ltal hasznlt strukturlis, modulris
programozsi mdszert a Java nyelv esetben felvltotta egy j szemlletmd, a megoldand
problmk objektum-orientlt mdon val megkzeltse. E mdszer kzponti elemei az
objektumok, amelyek segtsgvel a megoldand problmt lerjuk, modellezzk. Egy Java
program lnyegt az objektumok egyms kztti egyttmkdse, kommunikcija alkotja
[8]. Nzzk, mi is lehet objektum? Pl. egy aut vagy egy ember.
Minden ilyen objektum kt f jellemzvel rendelkezik:

tulajdonsgokkal (attribtum, adattag, vltoz) pl. az aut szne, aktulis


sebessgfokozata, vagy az ember neve, testmagassga, aktulis tevkenysge

viselkedsi jellemzkkel (metdus, mdszer) pl. az aut sebessget vlt, fkez, ill.
az ember beszl, dolgozik

A Java nyelv e kt jellemzt egysgesen kezeli:

Az azonos adattagokkal s metdusokkal rendelkez objektumokat egy kzs n.


osztlyba soroljuk. Az objektumok mindig egy ilyen osztly tagjai, pldnyai. Pl. az Autk
nev osztly egy pldnya lehet a HHT-376 frsz.- Opel Astra, vagy Kis Istvn tanul az
Ember osztlynak. Egy objektum ltrehozst pldnyostsnak is nevezzk, amelyhez a
tervrajzot az osztly adja.
Egy objektumpldny ltrehozst (inicializlst) az adott osztly n. konstruktora
vgzi el. Ennek sorn az jonnan ltrejv objektum adattagjai kezdrtket kapnak. A
konstruktort a new opertorral hvjuk meg, amely memriaterletet foglal le az jonnan
ltrehozand objektumpldny szmra.

84

Minden osztlynak van legalbb egy konstruktora (neve ugyanaz, mint az osztly),
amelyet ha mgsem hozunk ltre, akkor a Java rendszer megteszi ezt helyettnk. Ez a
konstruktor viszont paramter nlkli lesz, gy a ltrejv objektumnak nem adhatunk
kzvetlenl kezdrtket. Egy osztlynak tbb konstruktora is lehet, amelyek azonban a
paramtereik szma ill. tpusa alapjn megklnbztethetknek kell lennik.
Az adattagok (vltozk) s a metdusok is lehetnek osztly- vagy pldnyszintek.
Pl. az autk szne klnbzik, teht pldnyvltozkban troljuk ket. De ha minden aut 5
sebessges, akkor ezt a jellemzt elg osztlyszinten definilni. Ilyen specilis osztlyszint
vltoz lehet az osztly ppen aktulis objektumpldnyainak szma is.
Azt, hogy egy objektumpldny egy adott osztlynak tagja-e, az instanceof
logikai rtket ad opertorral krdezhetjk le:
(aut1 instanceof Aut)
5.3.11.2. zenet, interfsz, bezrs s lthatsg
Egy Java program objektumai zenetkldssel kommuniklnak egymssal, amely sorn az
egyik egy konkrt feladat elvgzsre kri a msikat. Ez a megszltott objektum egy a
kezdemnyez ltal lthat, elrhet metdusnak meghvst jelenti. Egy objektum azon
metdusainak sszessgt, amelyeken keresztl meghvhat, az objektum interfsznek
nevezzk. Minden objektumnak van interfsze, egybknt nem lenne rtelme a ltezsnek.
Az objektumok tervrajzt ad osztlyok defincijnl gondoskodhatunk arrl, hogy a
majdan ltrejv objektumpldnyok mely adattagjai legyenek lthatk, ill. mely metdusai
s konstruktorai legyenek meghvhatk ms objektumok ltal, valamint melyek legyenek
csak az adott objektum ltal hozzfrhetk. Ezt az eszkzrendszert nevezzk bezrsnak.
A Java nyelvben a bezrsi szinteket n. lthatsgi mdostkkal llthatjuk be. Fajti:

publikus (public)

vdett (protected)

privt (private)

mdost nlkli (alaprtelmezett, csomagszint lthatsg)

Az albbi tblzat mutatja a mdostk hatst ( lthat, nem lthat):

85

Elrsi szintek (lthatsg)


Mdost

Osztly

Csomag

Leszrmazott

sszes osztly

public

protected

mdost nlkli

private

Az els oszlop (Osztly) azt mutatja, hogy maga az osztly elrheti-e az adott
mdostval megjellt adattagjait metdusait. Termszetesen minden esetben igen. A msodik
oszlop azt jelzi, az eredeti osztllyal azonos csomagban lv ms osztlyok (fggetlenl a
szli kapcsolatoktl) elrhetik-e a tagokat. A harmadik oszlop mutatja, hogy az adott osztly
leszrmazottai (fggetlenl attl, hogy mely csomagban vannak) ltjk-e tagokat. A negyedik
oszlopban az sszes tbbi osztly szmra biztostott elrhetsg lthat.
Az interfsz s a bezrs eszkzvel biztosthat az objektumok integritsa, vagyis
adattagjaik ellenrztt krlmnyek kztti megvltoztathatsga.
5.3.11.3. rklds s polimorfizmus
Egy osztly legegyszerbben adattagjainak s metdusainak felsorolsval hozhat ltre.
Azonban az objektum-orientlt paradigma lehetsget ad egy msik, hatkonyabb mdszerre
is, az rkldsre. Az rklds az jrafelhasznlhatsgot szem eltt tartva arra ad
lehetsget, hogy mr meglv (szl-, s-) osztlybl kiindulva hozzunk ltre j (gyermek-,
leszrmazott-, al-) osztlyt. Az rkls kt osztly kztt fennll olyan kapcsolat, amely
sorn a leszrmazott osztly rendelkezik a szl osztly sszes tulajdonsgval (adattagjait s
metdusait sajtjaknt kezeli), s ezeket jabbakkal egsztheti ki. Az gy ltrehozott osztly is
lehet ms osztlyok se, gy ezek az osztlyok egy rklsi hierarchiba szervezdnek. Attl
fggen, hogy egy osztlynak egy- vagy tbb se van, beszlnk egyszeres- ill. tbbszrs
rkldsrl. A Java az egyszeres rkldst tmogatja.
A Java-ban az osztlyhierarchia legfels eleme az Object osztly, amelybl minden
ms osztly (kzvetve vagy kzvetlenl) szrmazik.

86

Egy alosztly az rklt metdusokat jraimplementlhatja. Ilyenkor az adott metdus


ugyanolyan nven, de ms, mdostott (alosztlyra specifiklt) tartalommal kerl
megvalstsra. Az ilyen metdusokat polimorfnak nevezzk.
Polimorfizmusrl beszlnk akkor is, amikor egy osztlyon bell tbb, azonos nev
metdus ltezik. Minden ilyen metdus implementcija klnbzik egymstl, amelyet a
paramtereik sorrendje vagy tpusa biztost. Ekkor beszlnk egy metdus tbbalaksgrl.
5.3.11.4. Osztly s objektum ltrehozsa
Definiljunk egy egyszer, ltalnosan elrhet Aut nev osztlyt, amelynek legyen hrom
megfelel tpus minden ms osztly ell rejtett adattagja a rendszm, a teljestmny s az
automata vlt megltnek trolsra, valamint egy osztlyszint pldnyszmllja:

Pldnkban az osztly lthatsgnak mdostja a public kulcssz, az adattagok


elrejtst pedig a private biztostja. A static minst lltja be a pldnyszm vltozt
n. osztlyvltoznak.
Hozzunk ltre egy olyan konstruktort, amely segtsgvel mr az inicializlskor
kezdrtket adhatunk az adattagoknak, ill. pldnyostskor az automatikus szmlls is
trtnjen meg! Ezt az osztlydeklarci albbi kiegsztsvel rhetjk el:

Miutn van egy mkdkpes osztlyunk, pldnyostsuk! Ezt az Aut osztly


main metdusban kezdemnyezhetjk:

87

Az osztlydeklarci rszleteivel a kvetkez fejezetekben ismerkednk meg.


5.3.12. OSZTLY S CSOMAG
5.3.12.1. Osztly ltrehozsa
A Java nyelven val programozs az adattagokkal s metdusokkal rendelkez objektumok
programozst jelenti. Nem beszlhetnk klasszikus rtelemben vett eljrsokrl s
fggvnyekrl,

csak

objektumok

egyttmkdsrl,

amely

kzttk

lv

kommunikcival valsul meg [9].


Objektumot

egy

osztly

pldnyostsval

hozhatunk

ltre.

Ha

nem

ll

rendelkezsnkre megfelel osztly, akkor neknk kell definilni egyet. Azaz elszr a
tervrajzot kell elkszteni, majd az alapjn lehet objektumokat ltrehozni.
Az osztlydefinci ltalnos szintaxisa a kvetkez:
Osztly fej:
[mdostk] class <osztly_neve> [extends <szl_osztly_neve>]
[implements <interfszek_neve>]
Osztly trzs:
{
[adattag deklarcik];
[inicializl blokkok];
[konstruktor deklarcik];
[metdus deklarcik];
}
Az osztly fejrsznek mdosti nemcsak hozzfrsi szinteket takarhatnak, hanem
opcionlisan egyb attribtumokat is:
Osztly-fejrsz mdostk:
[hozzfrsi szint]: public | res (csomagszint)
[abstract]: nem pldnyosthat osztly, amely rklds kiindulpontjaknt
hasznlhat; legalbb egy absztrakt metdust tartalmaz osztly ktelez
minstje
[final]: vgleges osztly, metdusai nem mdosthatk, az rklds okafogyott

88

Az extends (leszrmazott osztly ltrehozsa) s az implements (interfszek


osztlyhoz fzse) kulcsszavak a ksbbi fejezetek tmjt kpezik.
5.3.12.2. Adattagok
Egy objektum tulajdonsgait (aktulis llapott) az adattagjainak rtkei reprezentljk. Egy
adattagnak mindig van azonostja (neve), valamint tpusa, amely lehet primitv tpus (pl.
egsz szm, string, logikai), vagy akr osztlytpus is. Az adattagok a tpusuknak megfelel
rtkek trolsra szolglnak, de rtkket az objektum letciklusa sorn megvltoztathatjk
(kivve a konstansokat).
Az adattagok lehetnek pldnyszintek, azaz minden objektumpldnyban egyedileg
ltezk, valamint osztlyszintek, amelyek egy osztlyon bell csak egyszer lteznek, s
maghoz az osztlyhoz kapcsoldnak. Utbbi az adattag-defincit bevezet static
kulcsszval deklarlhat.
Egy pldnyszint adattag mindig egy objektumhoz tartozik. Ha a deklarcis rszben
nem adunk kezdrtket egy adattagnak, a Java automatikusan feltlti a tpusnak megfelel
nullaszer kezdrtkkel: pl. boolean false, szmok 0, char nulls kd karakter,
osztly tpus adattagok null referencia.
Az adattag neve lehet minden megengedett azonost, amelyet szoks szerint
kisbetvel kezdnk. Kt adattagnak nem lehet azonos neve egy osztlyon bell.
Adattagok deklarcija:
[mdostk] <tpus> <adattag_neve> [=<kezdrtk>][, ...];
Az

adattagok

deklarcija

az

osztlytrzsben,

brmilyen

konstruktor-

ill.

metdusdeklarcin kvl trtnik. A mdostk itt sem kizrlag hozzfrsi szinteket


takarhatnak, hanem ms eszkzket is:
Adattag-deklarcis mdostk:
[hozzfrsi szint]: public|protected|res (csomagszint)|private
[static]: osztlyvltoz deklarlsa
[final]: az adattag rtke vgleges, konstans
Az albbi pldban definilunk egy kezdrtk nlkli adattagokkal rendelkez
Bankbett nev osztlyt:

89

Lssuk ugyanezt az osztlyt kt kezdrtkadssal rendelkez adattaggal definilva:

A tmrebb kdok elrse miatt megengedett, hogy egy adattag-deklarcin bell


tbb azonos tpus adattagot is megadjunk, megjellve a tpust, majd az egymstl vesszvel
elvlasztott neveket felsorolva:

5.3.12.3. Inicializl blokkok


Az osztly adattagjainak kezdrtkt osztly- ill. pldny-inicializl blokkban is
bellthatjuk. Az inicializl blokkok specilis, fej nlkli metdusok, melyeket csak a blokkkpz kapcsos zrjelprok hatrolnak, s return utastst sem tartalmaznak. Az osztlyinicializl blokkot a blokk eltti static kulcsszval kell jellni. Fontos tudni, hogy az
inicializl blokk csak egyszer fut le: tpustl fggen az osztly ltrehozsakor, ill. a
pldnyostsok alkalmval egyszer-egyszer pldnyonknt.
5.3.12.4. Konstruktorok, pldnyosts
Egy osztly pldnyostsa mindig valamelyik konstruktornak meghvsval trtnik. A
konstruktor egy konkrt objektum letciklusa alatt pontosan egyszer fut le, ltrehozva ezzel az
objektumot, s belltva az adattagjainak kezdeti rtkt. A konstruktor lefutsa utn az
objektum ksz az zenetek fogadsra, feladatnak elvgzsre.

90

A konstruktor neve kttt (mindig megegyezik az t hordoz osztly nevvel), gy egy


osztlynak csak akkor lehet tbb konstruktora (konstruktor tlterhels), ha azok eltr
formlis paramterlistval rendelkeznek. A konstruktor egy specilis, tpus nlkli
metdusknt foghat fel, amelynek nincs visszatrsi rtke. Ms megfogalmazsban a
konstruktor egy az osztly tpusval visszatr nvtelen metdus.
Egy osztlyhoz mindig tartoznia kell legalbb egy konstruktornak, hiszen nlkle az
osztly nem pldnyosthat, vagyis nem hozhatk ltre az osztly tpusnak megfelel
objektumpldnyok. Ha nem adunk meg konstruktort, akkor a Java fordt mindig ltrehoz
egy alaprtelmezett, paramter nlkli konstruktort. Ennek meghvsa olyan pldnyt hoz
ltre, amelynek adattagjai nullaszer rtkekkel rendelkeznek: a numerikus tpusok nulla, a
karakteres tpusok null, a logikai tpusok false rtket vesznek fel. Ha azonban
ksztnk valamilyen konstruktort, akkor a paramter nlkli konstruktor elvsz. gy ha
mgis szksgnk van r, definilnunk kell!
Csak olyan paramterlistt adhatunk t egy konstruktornak, amelynek megfelel
konstruktort ksztettnk, egybknt a fordt hibt jelez.
Konstruktor deklarcija:
[mdostk] <osztly_neve>([<tpus> <adattag_neve>[, ...]]) {
[this.]<adattag_neve> = <adattag_neve>[, ...];
}
A

metdusokhoz

hasonlan

ha

egy

konstruktorban

olyan

vltoz-

vagy

paramternevet alkalmazunk, amely egyben az osztly egy adattagjnak is az azonostja,


akkor a this kulcsszval minstve hivatkozhatunk az adattagra, mg minsts nlkl a
vltozra ill. a paramterre. Figyelem! A this minst ezen alkalmazsa nem tvesztend
ssze a this() alak konstruktorhvssal!
Nzzk az albbi konstruktorfajtkat!

91

Az els konstruktor a paramterek alapjn hozza ltre az objektumpldnyt, a msodik


esetben nincs paramtertads, mgis minden adattag kezdrtket kap. Az ilyen res
paramterlistj konstruktorban a this minst felesleges az adattagok el, mivel ilyenkor
nincsenek ket eltakar loklis nevek vagy paramterek. A harmadik esetben csak egy
paramterrel hvunk meg egy jabb konstruktorfajtt, a tbbi paramtert maga a konstruktor
lltja

be

this([<aktulis

paramterlista>])

osztlyon

belli

konstruktorhvst kezdemnyez kulcssz hasznlatval.


Egy konstruktor meghvsa a new kulcsszval trtnhet:
Pldnyosts:
<osztly_neve> <objektumpldny_neve>;
<objektumpldny_neve> =
new <osztly_neve>([aktulis paramterlista]);
vagy
<osztly_neve> <objektumpldny_neve> =
new <osztly_neve>([aktulis paramterlista]);
A hromfle konstruktor meghvsnak mdja:

Lssuk a konstruktorhvsok eredmnyekppen ltrejv objektumok adattagjainak


tartalmt is (az osztly toString() metdusnak megfelel mdostsa utn):

92

Egy konstruktorbl az osztly egy msik konstruktort, ill. a kzvetlen sosztly egy
konstruktort a this() ill. a super() kulcssz alkalmazsval rhetjk el.
5.3.12.5. Metdusok
Az osztlyokhoz tartoz objektumok viselkedst (vagyis az objektumokhoz kldhet
zeneteket) az osztly defincijban felsorolt metdusok hatrozzk meg. A metdus egy
olyan programrutin, amely egy objektum egy konkrt feladatnak algoritmust valstja meg.
A Java nyelvben a metdusoknak kt nagy csoportjt klnbztethetjk meg a
visszatrsi rtkknek megfelelen. Az egyik a visszatrsi rtkkel nem rendelkez
eljrsok, mg a msik az ezzel rendelkez fggvnyek csoportja. Fggvnyek esetn meg
kell adni a visszatrsi rtk tpust, mg a msik csoport esetn a void kulcssz helyettesti
azt.
A metdusdefinci ltalnos szintaxisa a kvetkez:
Metdus fej:
[mdostk] <tpus> <metdus_neve>([formlis paramterlista])
[throws <kivtelnvlista>]
Metdus trzs:
{
[loklis vltoz-deklarcik];
[utastsok];
[return[<kifejezs>]];
}

93

A metdus fejrsznek mdosti nemcsak hozzfrsi szinteket takarhatnak, hanem


opcionlisan egyb attribtumokat is:
Metdus-fejrsz mdostk:
[hozzfrsi szint]: public|protected|res (csomagszint)|private
[abstract]: rklds cljbl kszlt, res metdus: nincs metdusblokk (kapcsos
zrjelpr), kifejtsre egy leszrmazott osztlyban kerl sor, a
metdusfejet pontosvessz zrja
[final]: vgleges metdus, a leszrmazott osztlyokban a metdus nem mdosthat
[static]: osztlymetdus, csak statikus osztlyszint adattagra s metdusra hivatkozhat
Ha a static kulcssz nem szerepel a fejrsz mdosti kztt, akkor
pldnymetdusrl van sz, amely pldnymetdus pldnyszint adattagokra s ms
pldnymetdusokra (sszefoglal nven pldnytagokra), valamint nyilvnos (public)
osztlytagokra (azaz osztlyszint adattagokra s metdusokra) hivatkozhat.
A <tpus> a metdus visszatrsi rtknek tpust hatrozza meg. Az eljrsok
visszatrsi tpusa void, a fggvnyek pedig brmilyen primitv tpus, vagy hivatkozsi
tpus lehet.
A formlis paramterlistt egy tpusokbl s szintaktikailag loklis vltoznak
minsl adattagokbl ll prosok alkotjk. Egy metdushvskor az aktulis- s a formlis
paramterlistk elemeinek pronknt

meg kell egyeznik, azaz rtkads szerint

kompatibilisnek s pronknt megfelel sorrendeknek kell lennik. A Java-ban csak rtk


szerinti paramtertads ltezik.
A throws (kivtelek tovbbkldse) kulcssz egy ksbbi fejezet tmja lesz.
Egy metdust a neve s a paramterlistja azonost egyrtelmen, teht egy osztlyon
bell megadhat kt azonos nev metdus, ha azok paramterlistja (szignatrja) vagy a
listban szerepl paramterek tpusaiban, vagy azok sorrendjben, esetleg mindkettben
eltrnek. Hivatkozskor a futtat krnyezet a megadott paramterek tpusbl s sorrendjbl
el tudja dnteni, hogy a kt azonos nev metdus krl melyiket kell vgrehajtania. Az gy
ltrehozott szerkezetet a polimorfizmus egyik formjnak tekinthetjk (metdusnevek
tlterhelse overload).

94

Ha egy metdusban olyan vltoz-, vagy paramternevet alkalmazunk, amely egyben


az osztly egy adattagjnak is az azonostja, akkor a this kulcsszval minstve
hivatkozhatunk az adattagra, mg minsts nlkl a vltozra ill. a paramterre.
A metdusok visszatrsi rtknek tpusa a metdus deklarcijakor adhat meg. A
metduson bell a return felttel nlkli vezrlstad utastssal lehet a visszaadott
rtket ellltani. A void-knt deklarlt metdusok nem adnak vissza rtket, ezrt
return utastst sem szksges tartalmazniuk. Viszont minden olyan metdusnak, amely
nem void-knt lett deklarlva, ktelezen tartalmaznia kell a return utastst. St, a Java
fordt azt is kiknyszerti, hogy return utastssal vgzdjn minden lehetsges
vgrehajtsi g. A visszaadott rtk adattpusnak meg kell egyeznie a metdus deklarlt
visszatrsi rtkvel. Ezrt nem lehetsges pl. egsz szmot visszaadni olyan metdusbl,
amelynek visszatrsi rtke logikai tpus.
Az albbi kt metdus egyike eljrs, amely eldnti, hogy pozitv sszeg-e a
bankbett, a msik pedig egy fggvny (a paramterknt kapott egsz szmmal megnveli az
ad mrtkt):

A kt metdus meghvsa s futsuk eredmnye:

95

Specilis metdus a main metdus, amelyet clszer az osztlyon bell utolsknt


deklarlni. Egy alkalmazs vgrehajtsa sorn a Java futtatrendszere elszr mindig
meghvja az alkalmazs valamelyik osztlynak main metdust, s ez a metdus fogja az
sszes tbbit meghvni.
public static void main(String[] args) {
}
A public mdost biztostja, hogy a metdus a programon bell brhonnan elrhet
legyen, a static jelzi, hogy osztlymetdusrl van sz, s a void kulcsszbl lthatjuk,
hogy a metdusnak nincs visszatrsi rtke. A main metdusnak egy string-tmb tpus
paramtere van, amely a parancssori paramtereket tartalmazza.
5.3.12.6. Csomag
A csomag logikailag sszefgg osztly- s interfszdefincik gyjtemnye. Hierarchikus
felptsvel rendszerezhetjk tpusainknak, kln nvtereket ltrehozva szmukra. A csomag
elnevezse a package <csomagnv> utasts segtsgvel trtnhet, amelyet a fordtsi
egysg legels sora kell, hogy legyen.
Ha olyan osztlyokat is szeretnnk sokszor hasznlni, amelyek ms csomagokban
vannak, akkor azokat (az lland csomagnv hivatkozst elkerlend) importlni rdemes.
Formi:

teljes csomag:
import <csomagnv>.*;
csomagon belli csomag: import <csomagnv>.<bels_csomagnv>.*;
csomag egy osztlya: import <csomagnv>.<Osztlynv>;
Az importl utastsok ktelezen a csomagdeklarcis sor utn kvetkeznek. Egy

utastsban csak egy osztly (vagy a .*-gal egy teljes csomag) importlhat. A Java fordt
minden csomaghoz automatikusan hozzfordtja az alapvet osztlyokat (pl. System,
String) tartalmaz java.lang csomagot, gy ezt nem szksges kln importlni. Az
importls mvelete nem rekurzv, teht egy teljes csomag importlsakor nem lesznek
elrhetk az alcsomagok osztlyainak defincii.

96

5.3.13. RKLDS
5.3.13.1. Az rklds
A 11. leckben mr volt sz az rklds elmleti alapjairl. Ezen eszkz segtsgvel ltez
sosztlybl

szrmaztathatunk

tetszleges

szm

leszrmazott

osztlyt,

annak

tovbbfejlesztse, kibvtse cljbl. Az utdosztly tovbbi osztlyok se lehet, gy egsz


osztlyhierarchik pthetk fel. A Java-ban minden osztlynak szigoran csak egy kzvetlen
szlosztlya van. Fontos tudni, hogy egy leszrmazott osztly minden olyan zenetre tud
reaglni, amelyre az se is tudna. Az utdosztly rkli sszes snek minden olyan
adattagjt s metdust, amely nem private minsts.
Az rkldssel egy mr ltez osztly adattagjait (tulajdonsgait) s metdusait
(viselkedsmdjt) bvthetjk, mdosthatjuk:

j adattag hozzadsval

j metdus hozzadsval

ltez adattag elfedsvel

ltez metdus fellrsval


Alaprtelmezsben egy jonnan ltrehozott osztlynak az Object nev osztly lesz

az se, amely a Java osztlyhierarchijnak cscsn ll, s minden Java-beli osztly kzs
se. Ezt kihasznlva olyan ltalnos programokat rhatunk, amelyek nem ktik ki, hogy
milyen osztly objektumokra van szksgk. Pl. implementlhatunk egy ltalnos
felhasznls verem adatszerkezetet, amely brmilyen objektumot tud kezelni. Az Object
osztly az egyetlen kln nem importland csomag, a java.lang csomag rsze.
Ha ltrehozand osztlyunk szmra nem megfelel (pl. tl ltalnos) az Object
osztly, akkor az extends kulcsszt hasznlva ms specifikusabb sosztlybl is
rkltethetjk az j osztlyunkat.
Az rklds deklarcija:
[mdostk] class <utdosztly_neve> extends <sosztly_neve>
[implements <interfszek_neve>];

97

5.3.13.2. Adattagok elrejtse


Ha egy osztly adattagja ugyanazt a nevet viseli, mint a szlosztlya, akkor elrejti azt (mg
akkor is, ha klnbz tpusak). Ekkor a szlosztly adattagjra nem hivatkozhatunk
egyszeren a nevvel, ezrt ltalban nem javasolt az adattagok elrejtse.
5.3.13.3. Metdusok fellrsa s elrejtse
Ha egy leszrmazott osztly metdusnak ugyanaz a szignatrja (azaz neve, paramtereinek
szma s tpusa), valamint visszatrsi rtke, mint az sosztly metdusnak, akkor a
leszrmazott osztly fellrja az sosztly metdust. Ez a kpessg lehetv teszi, hogy egy
elg kzeli viselkeds osztlybl rkldve annak viselkedst szksg szerint
megvltoztatva j, leszrmazott osztly jhessen ltre. Pldul az Object osztly tartalmaz
egy toString() nev metdust, amely visszaadja az objektumpldny szveges
reprezentcijt. Ezt a metdust minden osztly megrkli. Az Object e metdusnak
vgrehajtsa azonban nem tl hasznos a leszrmazott osztlyok szmra, ezrt a metdus
fellrsa clszer, hogy hasznlhatbb informcit nyjthasson az objektum sajt magrl.
Errl bvebben e lecke tovbbi rszben lesz sz.
A fellr metdus lthatsga lehet bvebb, mint a fellrt metdus, de szkebb
nem. Mivel egy leszrmazott osztly objektuma brhol hasznlhat, ahol egy sosztlybeli
objektum, ezrt a leszrmazott egyik tagjnak lthatsga sem szklhet, hiszen akkor az
ilyen hasznlat lehetetlen lenne.
Egy leszrmazott osztly nem tudja fellrni az olyan metdusokat, amelyek az
sosztlyban final (vgleges) minstssel definiltak. Azonban fell kell rni azokat a
metdusokat, amelyeket a felsbb osztlyban abstract-nak nyilvntottak, vagy magnak a
leszrmazott osztlynak is absztraktnak kell lennie.
Ha egy leszrmazott osztly egy osztlymetdust ugyanazzal az alrssal
(szignatrval) definil, mint a felsbb osztlybeli metdus, akkor a leszrmazott osztly
metdusa elrejti (elfedi) a szlosztlybelit. Fontos megklnbztetni a fellrst az
elrejtstl! Az albbi pldaprogram jl szemllteti a klnbsget:
Adott egy llat sosztly, melynek osztly- s pldnymetdusa is van:

98

Szrmaztassunk belle egy Macska utdosztlyt, amelyben az o_elrejt()


osztlymetdust elrejtjk, s a p_fellr() pldnymetdust pedig fellrjuk.

Ebben az osztlyban a main metdus ltrehoz egy Macska pldnyt Tni nven,
majd ezt a pldnyt tpuskonverzival tteszi egy llat pldnyba llat (kisbetvel!) nven.
Utbbi pldnyra hvjuk meg mindkt metdust! Az eredmny:

99

Az

o_elrejt()

metdus

szlosztlybl

kerlt

meghvsra,

mg

p_fellr() a leszrmazottbl.
Osztlymetdushoz a futtatrendszer azt a metdust hvja meg, amely a hivatkozs
szerkesztsi idej tpusban van definilva. A pldban az llat pldny szerkesztsi idej
tpusa az llat. gy a futtatrendszer az llat-ban definilt, rejtett metdust hvja meg. A
pldnymetdusnl a futtatrendszer a hivatkozs futsidej tpusban meghatrozott
metdust hvja meg. A pldban az llat pldny futsidej tpusa a Macska, vagyis a
futtatrendszer a Macska osztlyban definilt fellr metdust hvja meg.
Fontos mg tudni, hogy egy pldnymetdus nem tud fellrni egy osztlymetdust, s
egy osztlymetdus nem tud elrejteni egy pldnymetdust.
5.3.13.4. A super() kulcssz hasznlata
Az rklds sorn csak az adattagok s a metdusok kerlnek t a leszrmazott osztlyba, a
konstruktorok nem. Mgis van lehetsg a leszrmazott osztly konstruktorbl az sosztly
egy konstruktort meghvni. Ezt a super() kulcsszval tehetjk meg. A super() egy
hivatkozs az sosztlyra, mkdse hasonl a this() kulcsszhoz. Segtsgvel az
sosztly egy konstruktorra vagy egy felldefinilt metdusra hivatkozhatunk. Ha nem
runk konstruktort, akkor a fordt automatikusan beilleszt egy paramter nlklit, amelynek
els sora a super() konstruktorhivatkozs. Ezrt ha az sosztlyunk nem rendelkezik
paramter nlkli konstruktorral, hibazenetet kapunk. Ilyen esetben rnunk kell egy
konstruktort, amelyben meg kell adnunk, hogy melyik skonstruktort szeretnnk hasznlni, s
milyen paramterekkel.
Az elz lecke Bankbett osztlybl rkltetjk a KamatosBett osztlyt,
majd az j osztlyt bvtjk egy j adattaggal, amely a kamatsszeget trolja:

100

Figyeljk meg a this minst hasznlatt is! A sima kamat azonost a konstruktor
loklis vltozjt jelenti, viszont a this.kamat az j osztly adattagjt hivatkozza.
5.3.13.5. Az Object osztly toString()s equals() metdusa
Van az Object osztlynak kt olyan alapvet metdusa, amelyeket a leszrmazott osztlyok
pldnyain sokszor alkalmazunk. rdemes s hasznos minden j osztly defincija sorn
fellrni ket, hogy a toString() megfelel rtkeket reprezentlhasson, ill. a sajt
ignyeinknek megfelel mdon tudjunk az equals() segtsgvel objektumokat
sszehasonltani, hogy egyenlk-e.
5.3.13.5.1. A toString() metdus
Gyakori eset, hogy tjkoztatst kvnunk kapni egy objektum pillanatnyi llapotrl,
amelyet az adattagjai reprezentlnak. Erre a Java-ban a toString() nvtelen metdus
szolgl. Azonban ez a metdus alapesetben nem azt jelenti meg, amit vrnnk. Nzzk, mi
lesz a System.out.println(b1) utasts eredmnye:

Amit ltunk, az nem az objektumpldny adattagjainak tartalma, hanem az azonostja


(OID - Object ID), amely az albbi felpts:
<csomagnv>.<osztlynv>@<objektumazonost>
Minden objektumpldnynak kln azonostja van. Definiljuk fell a nem statikus
toString() metdust gy, hogy a mi elvrsunknak megfelel kimenetet produkljon!
Az Object osztly toString() metdusnak felldefinilsa:
@Override
public String toString() {
return <objektumjellemzket ler karakterlnc>
}
Az albbiakban lthat egy lehetsges megolds a Bankbett osztly pldnyainak
szveges formban val megjelentsre. Figyeljk meg a System.getProperty
("line.separator") soremel metdust, amely biztostja az adattagok kln sorba
trdelst!

101

5.3.13.5.2. Az equals() metdus


Kt azonos osztlyhoz tartoz objektum akkor egyenl, ha az adattagjaik ltal reprezentlt
llapotuk megegyezik. Ezt sszehasonlt opertorral nem tudjuk megllaptani, ugyanis a
(<objektumnv1> == <objektumnv2>) logikai kifejezs az rintett objektumok
mutatjt hasonltja ssze, ami termszetesen csak akkor lesz azonos, ha egy objektumot
nmaghoz hasonltunk. Az equals() metdus viszont kpes gy sszehasonltani kt
objektumot, hogy az sszehasonlts alapjt kpez adattagok krt mi hatrozhatjuk meg a
metdus felldefinilsval.
Az Object osztly equals() metdusnak felldefinilsa:
@Override
public boolean equals(Object obj) {
if (obj == null || !(obj instanceof <Osztlynv>)
return false;
if (obj == this) return true;
return <adattag_sszehasonlt_logikai_kifejezsek>
}
Figyeljk meg a metdus trzsnek els utastst, amely azonnal kiszri az res s az
osztlyidegen objektumokat, ill. a msodik utasts felismeri azt, hogy az objektumot
nmaghoz hasonltjuk.
Az albbi pldban azokat a Bankbett objektumokat tekintjk egyenlnek, amelyek
tulajdonosnak neve megegyezik:

102

5.3.13.6. A compareTo() metdus


Ha azt szeretnnk elrni, hogy egy osztly pldnyai valamely adattagjuk alapjn
sszehasonlthatk legyenek, akkor a compareTo() metdust kell ehhez az osztlyba
implementlni. A metdus sszehasonltja az aktulis objektumot az tvett objektummal, s a
visszatrsi rtke attl fggen, hogy az aktulis objektum kisebb, egyenl, vagy nagyobb az
tvettnl, rendre negatv egsz, nulla ill. pozitv egsz rtk lesz.
A compareTo() metdust akkor rdemes s ktelezen kell is implementlni
egy osztlyba, ha clunk az osztly objektumainak sorba rendezse valamely adattagjuk
alapjn. Ilyenkor az osztlydefinci fejrszt az implements Comparable utastssal
kell kiegszteni.
A kvetkez pldban kiegsztjk a KamatBett osztly defincijt gy, hogy
pldnyai kamatsszegk alapjn sszehasonlthatk legyenek:

5.3.13.7. Vgleges osztlyok s metdusok


A final kulcsszval deklarlt adattagok rtke inicializlsuk utn mr nem mdosthatk,
s ezt nem teheti meg a leszrmaztatott osztly sem. Ez egy fontos szempont a rendszer
biztonsga s az objektum-orientlt tervezs szempontjbl. Ugyanez a helyzet az osztly
metdusaival is. Ha nem akarjuk, hogy egy szrmaztatott osztlyban felldefiniljanak egy
metdust, vglegesteni kell. Az Object sosztlynak is vannak final tpus metdusai,
de nem mindegyik az, lsd toString(), equals().
Ha magt az osztlyt a final kulcsszval deklarljuk, akkor belle leszrmaztatott
osztlyt egyltaln nem tudunk ltrehozni.

103

5.3.14. KIVTELKEZELS
5.3.14.1. A Java kivtelkezelse
A Java kivtelkezelsnek clja a programfuts sorn keletkezett hibk kiszrse s megfelel
kezelse. Az ilyen hibkat a Java platformon Exception-nek (kivtelnek) nevezik. Kt f
csoportjuk van: a futsi idben s a nem futsi idben keletkezett kivtelek.
Futsidej kivtelek az aritmetikai (pl. nullval val oszts), az indexelssel
kapcsolatos (pl. tmb nem ltez elemhez val hozzfrs), s a referencival kapcsolatos
(pl. objektumokra val hivatkozs) kivtelek. Ezeket a kivteleket nem ktelez
implementlni, de ersen ajnlott. Nem futsidej kivtelek a Java rendszern kvl
keletkeznek. Ilyenek az I/O mveletek sorn keletkez hibk (pl. a fjl nem tallhat).
Utbbiakat ktelez lekezelni.
A felmerl hibk sokflesgnek kezelst a Java az objektum-orientlt paradigma
lehetsgeinek felhasznlsval oldja meg: a kivteleket osztlyok (ill. objektumaik)
reprezentljk. Minden beptett vagy ltalunk ltrehozott kivtel kzs sosztlya a
Throwable osztly.
Amikor egy metdus futsa sorn valamilyen hiba lp fel (pl. nullval val oszts,
veremtlcsorduls, indexhatr tllpse, vagy a httrtrol megtelik, stb.), akkor egy
kivtelobjektum (egy kivtelosztly pldnya) jn ltre. Ez az objektum olyan informcikat
tartalmaz a kivtel fajtjrl s a program aktulis llapotrl, amelyeket a kivtel
lekezelsekor felhasznlhatunk. A kivtelobjektum ltrehozst s a futtatrendszer ltal
trtn lekezelst kivteldobsnak hvjuk. Ezeket ellenrztt kivteleknek is nevezzk. Az
ellenrztt kivteleket ktelez lekezelni, amit a fordt mr fordtsi idben ellenriz is.
Nzznk egy egyszer pldt a nullval val oszts kivtelkezelsre! Az albbi
program alaphelyzetben semmifle ellenrzst nem vgez az oszt rtkre vonatkozan:

104

A program futtatsa ennek megfelelen 0 osztnl hibt jelez:

Hagyomnyos megoldsknt az oszts mvelete eltt ellenrizzk az oszt rtkt!

Ez a megolds bonyolultabb ellenrzsek esetn az if felttelek garmadjt vonhatja


magval, ami nagymrtkben rontja a kd olvashatsgt s az esetleges programjavts
lehetsgt.
5.3.14.2. A try blokk
Kivtel mindig egy metdus trzsben keletkezhet. Ha ezeket a hibkat mind ugyanitt
kezelnnk le, a programkd ttekinthetsge jelentsen romlana, s nem is lehet minden
hibra elre felkszlni. Ezt szem eltt tartva olyan megolds szletett, amelyben a hibs,
kivteles programllapotot eredmnyezhet sorokat sszefogva, s hozz egy gynevezett
kivtelkezelt megadva a problma elegnsan megoldhat. Ekkor az adott blokkban fellp
kivteleket egysgesen, egy helyen kezelhetjk, jl elvlasztva egymstl a program f
feladatt vgz, illetve a hibk lekezelsrt felels kdrszt. Ennek megvalstsra a try catch - finally blokkszerkezet hasznlhat. Sorrendjk szigoran kttt!
A try blokk utastsokat zr kzre, amelyeket futsi idben vgig felgyelete alatt
tart. Lehetleg minl kevesebb utastst tegynk egy ilyen blokkba, mert kivtel keletkezse
esetn csak a kivtel keletkezsi helyig hajtdnak vgre a blokkbeli utastsok.

105

A try-catch-finally kivtelkezel kdblokk felptse:


try {
<utastsok>
}
catch (<kivteltpus_1> <vltoznv_1>) {
<utastsok>
}
[catch (<kivteltpus_2> <vltoznv_2>) {
<utastsok>
}]
[finally {
<utastsok>
}]
Nhny fontosabb kivtelosztly:

Exception (ltalnos hiba, ez az osztly minden ms kivtelosztlyt magba foglal)

IOException (ltalnos I/O hiba)

FileNotFoundException (a fjl nem tallhat)

EOFException (olvass a fjl vge utn)

IndexOutOfBoundsException (indextlcsorduls)

NumberFormatException (szmformtum hiba)

ArithmeticException (aritmetikai hiba)

IllegalArgumentException (rvnytelen argumentum)

InputMismatchException (az input adat nem megfelel tpus)

5.3.14.3. A catch blokk


A catch blokkok a try blokkban keletkez tpusuknak megfelel kivteleket kezelik le.
Minden try blokkhoz megadhat tetszleges szm (ha nincs finally blokk, akkor
legalbb egy) catch g, amelyek az esetlegesen fellp hibk feldolgozst vgzik.
Semmilyen programkd nem lehet a kt blokk kztt! A catch gak sorrendje sem
mindegy, mert az els olyan catch blokk elkapja a kivtelt, amelynek tpusa megegyezik a
kivltott kivtellel, vagy se annak. Ezrt rdemes a specifikus kivteltpusoktl az
ltalnosabb tpusok fel haladva felpteni a catch blokkokat. A hierarchia tetejn ll

106

Exception osztly nem elzhet meg ms (leszrmazott) kivtelosztlyokat, mert azok


sosem hajtdnak vgre. A fordt ilyen sorrend esetn hibt jelez.
Ha valahol kivtel keletkezik, akkor a futtat rendszer megprbl olyan catch gat
tallni, amely kpes annak kezelsre. Az az g kpes erre, amelynek paramtere megegyez
tpus a kivltott kivtellel (vagy annak svel), valamint amelynek a hatskrben a kivtel
keletkezett.
A catch g egy szigoran egyparamteres metdusknt foghat fel, amely
paramterknt megkapja a fellp kivtelt, s ezt tetszlegesen felhasznlhatja a hibakezels
sorn. A kivtelobjektumot nem ktelez felhasznlni, mert sokszor a tpusa is elg ahhoz,
hogy a programot a hibs llapotbl mkdkpes mederbe tereljk.
Ha a catch gak egyike sem tudja elkapni a kivtelt, akkor a begyaz kivtelkezel
blokkban folytatdik a keress. Ha egyltaln nincs megfelel catch blokk, a program
befejezdik.
5.3.14.4. A finally blokk
A finally g akkor is lefut, ha volt kivtel, akkor is, ha nem. Ebben a tetszlegesen
felhasznlhat blokkban kezdemnyezhetjk pl. a nyitott fjlok bezrst, amit fggetlenl
attl, hogy a megelz try blokkban volt-e kivtel, vagy sem mindig illik megtennnk. Ezt
az gat nem ktelez ltrehozni, kivve, ha nincs egyetlen catch g sem. A kivtel
lekezelse utn a program vgrehajtsa a kivtelkezel kdblokk utni utastson folytatdik.
A kivtelkezel blokkok megismerse utn alaktsuk t pldaprogramunkat! Az oszts
mvelete kerljn egy try blokkba, a hibt egy catch blokkban aritmetikai hibaknt
kezeljk le, valamint a finally blokkban jelezzk az oszts sikeressgt!

107

A futs eredmnye nulla oszt esetn:

A vrs sznben megjelen /

by

zero zenet a kivtelkezel osztly

hibazenete. Ebben a pldban a finally gra nincs is igazn szksg, gy ezt elhagyva s
a hibazenetet trva egyszersthet a program.

108

A kimenet is bartsgosabb:

5.3.14.5. A throws hasznlata


Ha egy metdus vgrehajtsa kzben kivtel keletkezik, s ezt nem akarjuk, vagy nem tudjuk
helyben az adott metduson bell lekezelni, akkor tovbb kell kldennk egy magasabb
szintre, az adott metdust hv metdus fel. Ez mindaddig folytatdhat, amg el nem rjk
azt a szintet (metdust), amely mr elegend informcival rendelkezik a megfelel
intzkedsek elvgzshez. Ezt a metdus fejlcben a throws kulcsszval tehetjk meg,
utna felsorolva azokat a kivtelosztlyokat (vagy egy sket), amelyeket nem kvnunk
(vagy nem tudunk) helyben lekezelni. Legksbb a program main metdusban az ilyen
kivteleket le kell kezelni.
5.3.14.6. Sajt kivtelek ltrehozsa a throw utastssal
A Java kivtelkezelse nyitott, ami azt jelenti, hogy brki ltrehozhat sajt nvvel s
funkcionalitssal elltott kivtelosztlyokat, amelyeket clszer az Exception osztlybl
szrmaztatni. Az j kivtelosztlyok nevben clszer az Exception szt is szerepeltetni,
hogy utaljon annak szerepre.
Sajt kivtelobjektum ltrehozsa:
throw new <Sajt_Kivtelosztly_nv> ("Sajt hibazenet");
Az albbi program egy 3 db egsz szm trolsra szolgl verem adatszerkezetet
modellez [5]. Megvalstjuk a verembe helyezst s a verembl val kivtelt gy, hogy e
mveletek hibjnak lekezelsre sajt kivtelosztlyt hasznlunk, s a hiba okt is
megjelentjk.
Els lpsknt a sajt kivtelosztlyunkat definiljuk, amely hibazenet tvtelre is
alkalmas.

109

Majd kvetkezik a verem implementlsa. A verem fontos jellemzje a mrete s a


veremmutat. A betesz() metdus a paramterknt megadott szmot a verem mutat
ltal jelzett tetejre helyezi, a kivesz() paramter nlkli metdus pedig a verem
tetejn lev szmot emeli ki. A szm helynek kinullzsa nem ktelez, mert a verem
teltettsgt a mutat llsa jelzi, nem a tartalma.

Prbljunk hromnl tbb elemet elhelyezni a veremben, majd ezutn a megtelt


verembl hromnl tbbet kivenni!

110

Az eredmny kirsa kiss rapszodikus sorrendben trtnik, mivel a kivtelek kezelse


kln programszlon fut, gy nem a vrt idpillanatban rjk ki a hibazenetket. Ezrt a hibt
kivlt mvelet eltt alkalmazzunk egy 2 mp-es ksleltetst, amelyet a vr() nev sajt
kszts metdussal lltunk el. Az msec osztlyvltoz trolja a ksleltets idejt
milliszekundumban.

111

Az eredmny:

Jl lthat, hogy a 4. szm elhelyezse s az res verembl val 4. kivtel is hibt


okozott. Figyeljk meg a verem mkdst is! Az utoljra bekerlt elem elsknt lett kivve
(LIFO adatszerkezet: Last In First Out, utoljra be elsknt ki).
Trjnk vissza egy rvid kiegszts erejig a 9. heti tananyag I/O mveleteire! Az ott
alkalmazott forrskdok a jobb ttekinthetsg miatt nem tartalmaztk a fjl bezrst
megvalst close() metdus biztonsgos kivtelkezelst, pedig ez a mvelet is okozhat
kivtelt (pl. idkzben megsznt a kapcsolat a fjllal), gy ezt az utastst is rdemes trycatch szerkezetbe foglalni a kvetkezk szerint:

112

Figyeljk meg, hogy a close() utastst vd try-catch szerkezet a fjlkezel


mveletek finally gban helyezkedik el, teht minden krlmnyek kztt lefut. Viszont
a 9. fejezetben szerepl pldk mindegyikben hiba volt a close() utasts a try blokk
ltal vdett, ha eltte bekvetkezett egy kivtel (pl. a fjlba rs sorn), akkor soha nem kerlt
r a vezrls, teht a fjl nyitva maradhatott.
5.3.15. OBJEKTUM-ORIENTLT FELADAT MEGOLDSA
5.3.15.1. Szmtgp
Az albbiakban egy olyan sszetett feladatot fogunk megoldani, amely a Java nyelv igazi
erssgt, az objektumkzpont programozst helyezi eltrbe [10].
Adott az albbi osztly:

1. feladat: Definiljunk egy olyan konstruktort az osztlyhoz, amellyel az adattagoknak


kezdrtk adhat!
A megoldsban segt a NetBeans fejlesztrendszer. A szerkesztterlet helyi
menjnek

Insert

code menpontjbl kezdemnyezhetnk konstruktor-generlst,

kijellve azokat az adattagokat, amelyeknek kezdrtket kvnunk adni.

113

.
Figyeljk meg, hogy az adattagok nevei nmagukban mint paramterek jelennek meg,
az osztly igazi adattagjaira a this kulcsszval hivatkozhatunk!
2. feladat: rjuk meg az adattagok lekrdez s bellt metdusait!
Ismt hasznlhat a helyi men, ahol a metdusokat a Getter (lekrdez) s a Setter
(bellt) menpontok generljk le.

A ltrejv kdrszletek:

Figyeljk meg, hogy az automatikus generls az adattagokat mindkt metdusnl


ABC sorrendbe lltotta, amely utastsok termszetesen visszallthatk az osztlydefinci
szerinti sorrendjkbe.
3. feladat: Definiljuk fell az osztlyunk toString() metdust gy, hogy az adattagjait
soronknt s a kvetkez formtumban adja vissza:

114

<processzor> <sebessg> GHz CPU, <ram> MB RAM, <hdd> GB HDD


(pl. AMD 2.4 GHz CPU, 1024 MB RAM, 500 GB HDD)
Az Object osztlybl rklt toString() metdus tdefinilst szintn
kezdemnyezhetjk a helyi men metdus-fellr (Override Method) menpontjban,
viszont a kapott kdot a kvnalmaknak megfelelen t kell alaktani:

4. feladat: Definiljuk fell az equals() metdust gy, hogy kt szmtgp akkor legyen
egyenl, ha a processzoruk neve megegyezik, s a sebessg- s kapacits-paramtereik
pronknt maximum 10%-kal trnek el egymstl!
Ennek a metdusnak is generljuk a vzt, majd a Math osztly abs() metdust
felhasznlva s a kdot jelentsen trva ellltjuk az sszetett felttelt. Az
automatikusan generld hashCode() metdus tdefinilsra most nincs szksg, akr
trlhet is.

Figyeljk meg, hogy null (res) s nem szmtgp objektum esetn nincs
tdefinils!
5. feladat: Egsztsk ki a Szmtgp osztly defincijt gy, hogy az objektumai
processzoruk

sebessge

alapjn

sszehasonlthatk

legyenek!

Implementljuk

Comparable interfszt is!

115

A feladat megoldshoz a compareTo() metdust kell felldefinilni, hogy a


megadott szempont szerint tudjuk az osztlypldnyokat sszehasonltani.

A Comparable interfsz implementlst az osztly fejben jelezni kell. Defincija


csak egyetlenegy metdust tartalmaz.

6. feladat: Szrmaztassunk a Szmtgp osztlybl egy Notebook osztlyt! Az j


osztly objektumai a szmtgp tulajdonsgain kvl egy j vals rtk zemid
adattaggal is rendelkeznek. Ksztsnk az j adattaghoz lekrdez metdust, valamint az
osztlyhoz egy konstruktort, amellyel mindegyik adattagjnak kezdrtk adhat!
Az j osztlyt az extends kulcsszval szrmaztathatjuk a szlosztlybl. A
konstruktor s az j adattag lekrdez metdusnak ellltsa a genertor hasznlatval
egyszer. Figyeljk meg a super() metdus hasznlatt! Segtsgvel a szlosztly
adattagjaira hivatkozhatunk, mg a this a szrmaztatott osztly j adattagjt hivatkozza.

7. feladat: Egsztsk ki a Notebook osztlyt egy olyan konstruktorral is, amely a RAM
mrett 2048 MB-ra lltja be, a tbbi adattag rtkt pedig paramterek hatrozzk meg!
A Notebook osztly j konstruktorban a ram adattag nem szerepel paramterknt,
mert konkrt rtket kap, amit a super() metdus meghvsakor lltunk be.

116

8. feladat: Definiljuk fell a Szmtgp osztlytl rklt toString() metdust gy,


hogy a notebook a szmtgptl rklt adattagjai utn az zemidt is jelentse meg egy
tizedes pontossggal (pl. ..., 3,5 ra zemid)!
A korbban mr megismert java.text.DecimalFormat osztlyt importlva a
feladat megoldsa nem okoz gondot.

9. feladat: Ksztsnk egy main nev osztlyt, amely a fprogramot tartalmazza. Hozzunk
ltre kt-kt Szmtgp tpus objektumot az albbi adatokkal, majd rassuk ki ket a
kpernyre!

Szmtgp szg1: AMD, 3.2 GHz, 4096 MB, 400 GB

Szmtgp szg2: Intel, 2.6 GHz, 2048 MB, 500 GB

A kt objektumpldny adattagjainak megjelense a toString() metdus


tdefinilsnak megfelel formtum:

117

10. feladat: Hozzunk ltre kt Notebook objektumot is! Az els minden adattagjt
paramterknt kapja, a msodik viszont 2048 MB-os memrival jjjn ltre. Adatok:

Notebook nb1: AMD Turion X2, 1.8 GHz, 3072 MB, 250 GB, 3.55 ra

Notebook nb2: Intel Atom, 1.6 GHz, 120 GB, 2.2 ra

Figyeljk meg, hogy a kt objektumpldnyt ms-ms konstruktor hozta ltre!

118

5.4. Az oktatprogram hasznlata


Oktatprogramunkat webes krnyezetre terveztk, gy mg telepteni sem kell. Brmely olyan
szmtgprl elrhet, amely internetkapcsolattal rendelkezik s teleptve van r egy
webbngsz. Platformfggetlen, azaz nemcsak Windows krnyezetbl, hanem gyakorlatilag
brmely ms opercis rendszer all is hasznlhat. A Java programok fejlesztsre s
futtatsra alkalmas komponenseket (JDK, NetBeans) a gyrtk tbb opercis rendszer
(Mac OS X, Linux, Solaris) al is elksztettk, gy a pldaprogramok is feldolgozhatk, s a
feladatok is elvgezhetk brki szmra. A weblapot az ingyenes trhelyet biztost
UltraWEB Kft. (http://www.ultraweb.hu) szerverre tltttk fel.
Elrhetsge: http://java2.uw.hu
A feldolgozand anyagot flves oktatsi idszakra terveztk, heti bontsban
trgyalva egy tanegysget. Egy tanegysg feldolgozshoz kb. 4-5 ra szksges, de hosszabb
oktatsi idszak is alkalmazhat, gy cskkenthet a heti raszm.
A weblap felptse nagyon egyszer. Egy tanegysg az j ismeretek trgyalsval
indul, szinte kivtel nlkl gyakorlati pldaprogramokkal illusztrlva, amely programok
forrskdja s az esetleges inputllomnyaik is letlthetk. Majd elmleti tesztkrdsek, s
gyakorlati programozsi feladatok kvetkeznek. A tesztek azonnal kirtkelsre kerlnek, a
feladatok magyarzatokkal elltott megoldsa szintn letlthet. A tesztek s a feladatok
kln menpontokba szervezve egytt is elrhetk. Rendelkezsre ll egy fogalomtr is,
amely elssorban az objektum-orientlt paradigma fogalomrendszert foglalja ssze.

119

6. A tovbbfejleszts lehetsgei
A tananyagot mr jelenlegi llapotban is tantsra alkalmasnak vljk, de ez nem jelenti azt,
hogy nyugodtan lhetnk a babrjainkon. A puding prbja az evs! Egyrszt hinyzik egy
teljes tantsi ciklus tapasztalata, amely minden oktatsi anyag hasznlhatsgnak alapvet
mrcje. Olyan krdsekre kell mg keresnnk a vlaszt, hogy j-e a tanegysgek sorrendje,
egyltaln azok tartalma, s a tanulk szmra rthet-e a Java nyelv fogalomrendszere?
Vagy ott van az objektum-orientlt programozsi szemlletmd s annak eszkzrendszere,
amely elgg komplex ahhoz, hogy ne legynk biztosak abban: egy kzpiskolai tanulnak
mindez knnyen megrthet.
gy rezzk, hogy a tesztkrdsek s a gyakorl feladatok kre bvtsre szorul,
jelenlegi mennyisgket rdemes s szksges is nvelni. Hinyzik a tanuli nrtkels s
tanri rtkels rendszere is. A tesztkrdsekre adott vlaszok azonnali kirtkelse
nmagban hasznos, de komplex rtkelsre nem ad mdot.
A tovbbfejleszts msik terlete a mai szmtgpes oktatsi technolgik
ismeretben szinte tlcn knlja magt. Oktatprogramunk j genercij eTananyag
platformra val tltetse minsgi ugrst jelentene. E rendszerekben mr nem a tanr van a
kzpontban, hanem a tanul. A tanuli passzivitst (csak olvass), felvltja az aktivits
(olvass-rs). Ez az j szemlletmd egyni elrehaladst, aktv kzremkdst, gyjt- s
csoportmunkt, valamint a teljestmny egyni mrst s rtkelst is lehetv teszi.
Termszetesen ekkor sem maradhat el a tanri kzremkds, a tanuls folyamatnak
felgyelete elengedhetetlen. A tanulmnyaink sorn megismert Moodle ingyenes virtulis
oktatsi krnyezet ilyen felletet knl. Tananyagunk felptse s webes formja miatt
knnyen tltethet lenne, s a tesztkrdsek is olyan szoftverrel kszltek, amely
kompatibilis a Moodle-lel.
Oktatsi anyagot kszteni nem knny. Magabiztos szakmai felkszltsget,
szintetizl-kpessget, specilis elektronikus krnyezetben hasznlhat mdszertani
ismereteket, az lland tovbbfejlesztshez kitart motivcit, s nem utolssorban sok idt
s munkt ignyel. De a tanulifjsg elrehaladsrt mindezt rdemes felvllalni!

120

7. sszefoglals
Az oktatprogram ksztse sorn a bevezetben emltett clok vezettek bennnket.
Munknkkal egy olyan oktatprogram ksztst cloztuk meg, amely segtsget nyjt a
tanulknak, kollgknak, s a tma irnt rdekldknek a Java programozsi nyelv alapjainak
elsajttshoz, valamint az objektum-orientlt szemlletmd kialaktshoz.
ttanulmnyoztuk a NAT, az informatika kzponti kerettanterve s az emelt szint
informatika rettsgi programozsra vonatkoz elrsait. A kvetelmnyeket szem eltt
tartva lltottuk ssze az elsajttand tananyagot. A tananyag rszekre bontsnl heti
ciklusokban gondolkodunk, heti 4 tantsi ra keretben. A 15 lecke elsajttsa kb. egy
flves, kzs tanr-dik munka eredmnye lehet. A tananyag kszsgszintre trtn emelst
kveten, az emelt szint informatika rettsgin btran llhatnak a dikok a programozsi
feladat elksztse el.
Mind a ketten gyakorl pedaggusok vagyunk, veken t a Pascal ill. a Delphi
programozsi nyelv rejtelmeit prbltuk a dikokkal megszerettetni. Az itt szerzett gyakorlati
tapasztalatainkat is beptettk az oktatprogramba.
A sikeres rettsgi vizsgn tl, a tananyag elsajttsa kell alapot biztost szakirny
tovbbtanuls esetn (pl. mszaki informatikus, mrnk informatikus, informatikatanr, stb.)
az egyetemen, fiskoln oktatott programozs tantrgy sikeres teljestshez. A felsoktatsi
intzmnyekben a C++ programozsi nyelv mellett egyre tbb helyen alkalmazzk
laborgyakorlatokon a Java programozsi nyelvet.
Termszetesen az oktats nem fejezdik be a tantsi rn, szksg van a tanul
otthoni egyni munkjra is. Egy programozsi nyelvet elsajttani csak minl tbb feladat
nll elksztsvel, a programok futtatsval, tesztelsvel lehet. A tananyag elrhet az
interneten, gy a dikok az esetleges lemarads esetn akr otthon is beptolhatjk a
hinyossgokat. A leckk vgn tallhat feladatokat a dikok nllan, otthon ksztik el. A
megoldsok is elrhetk a neten, amennyiben gondjuk akadna a program elksztse sorn,
vagy szeretnk ellenrizni az elgondolsuk helyessgt.
Az oktatprogram lehetv teszi a tananyag egyni tempban trtn elsajttst, a
tesztek segtsgvel elmlyti a megszerzett ismereteket, felhvja a figyelmet a
hinyossgokra. A feladatok elvgzsvel begyakoroljk a dikok a klnbz programozsi

121

eszkzk hasznlatt, s megfelel

jrtassgra tesznek szert a fejlesztkrnyezet

hasznlatban.
A program termszetesen magban hordozza a tovbbfejleszts ignyt, melyeket az
elz fejezetben rszleteztnk.
A kvetkez 2010/2011-es tanvben azt tervezzk, hogy az eddig iskolnkban oktatott
Free Pascal ill. Delphi programozsi nyelvet lecserljk, s ttrnk a Java programozsi
nyelv tantsra. Az elksztett oktatprogram segtsgvel fogjuk a dikokat a Java nyelv
rejtelmeibe bevezetni.

122

8. Irodalomjegyzk
[1] Nemzeti Alaptanterv:
http://www.okm.gov.hu/letolt/kozokt/nat_070926.pdf (2010. prilis)
[2] Kerettanterv a gimnzium 9-12. vfolyamra:
http://www.okm.gov.hu/letolt/kozokt/kerettanterv/melleklet1/3_gimnazium/08_inform
atika.rtf (2010. prilis)
[3] Szakkzpiskolai szakmacsoportos alapoz oktats kerettanterve:
https://www.nive.hu/fejlesztes/kerettantervek/Mk28tart/Mk028-2-200.pdf
(2010. prilis)
[4] Az rettsgi vizsga vizsgaszablyzata:
http://net.jogtar.hu/jr/gen/getdoc.cgi?docid=99700100.kor (2010 prilis)
[5] Ksa Mrk: Adatszerkezetek s algoritmusok jegyzet (a verem s a sor):
https://infotech.inf.unideb.hu/honlap/adatszerk?action=AttachFile&do=view&target=a
datszerkezetek-05-20090326.pdf (2010. prilis)
[6] Juhsz Istvn: Programozs 1. jegyzet:
http://www.inf.unideb.hu/~panovics/programozas12009.pdf (2010. prilis)
[7] Juhsz Istvn: Programozs 2. jegyzet:
http://www.inf.unideb.hu/~panovics/Programozas220040330.pdf (2010. prilis)
[8] Debreceni Egyetem, IK: Programozs 1. s 2. kurzusok rai jegyzetei
[9] Java 6 online dokumentci: http://java.sun.com/javase/6/docs/api/ (2010. prilis)
[10] Java vizsgafeladat-sorok:
http://www.inf.unideb.hu/~panovics/beugrok.pdf (2010. prilis)
[11] Java Basics: http://leepoint.net/JavaBasics/index.html (2010. prilis)
[12] Java Programming Notes: http://leepoint.net/notes-java/index.html (2010. prilis)
[13] Nagy Gusztv: Java programozs v1.3 (Creative Commons licence):
http://nagygusztav.hu/sites/default/files/Java_programozas_1.3_0.pdf (2010. prilis)
[14] Angster Erzsbet: Objektum-orientlt tervezs s programozs, Java els ktet
4KR Bt., 2003
[15] Ills Lajosn: Szmtgpek a pedaggiban, Tanknyvkiad, Budapest, 1972
[16] Mricz Attila: Java programozsi nyelv, Alapismeretek, LSI Oktatkzpont, 1997

123

9. Fggelk
9.1. Feladatok
1.1. Tltsd le, teleptsd, s ismerkedjl a fejlesztkrnyezettel!
2.1. Jelentsd meg a konzolon a Holnap j leszek! szveget!
2.2. Rajzolj egy vzszintes vonalat a konzolra!
2.3. Mi lesz a kvetkez program outputja?

2.4. Rajzolj egy ngyzetet a konzolra!


3.1. Kszts egy eljrst, amely egy fenyft rajzol a konzolra!
3.2. Kszts egy fggvnyt, amely sszead kt szmot!
3.3. Mi lesz a kvetkez program outputja:
public class Feladat7{
public static void main(String[] args) {
int x=1;
int y=4;
System.out.println(x+"+"+y+"="+z);
}
}
3.4. Add meg a kifejezs (a / 2) + 2 * b zrjel nlkli alakjt!
3.5. Kszts programot, ami bemutatja a norml s a maradkos oszts kztti klnbsget!
4.1. Kszts programot, amely kiszmtja s kirja az 5 egysg sugar kr kerlett s
terlett!
4.2. Kszts programot, amely kiszmtja s kirja a kpernyre a 30 fokos szg
szgfggvnyeit!

124

4.3. Kszts programot, amely 10-tl 20-ig generl kt vletlen egsz szmot! Majd kirja a
kt szm sszegt, valamint szorzatt.
4.4. A kvetkez sorok kzl melyik fog hiba nlkl lefordulni?
a) byte a=256;
b) int i=10,
c) char c="a";
d) double d=1.33;
4.5. Kszts programot, ami ha megadunk kt nem negatv szmot sztring formtumban,
akkor a kisebbik ngyzetgykt kirja a kpernyre.
5.1. Kszts programot, amely az Indul a grg aludni sztring tartalmt megfordtja s
kirja!
5.2. Kszts programot, amely kt adott sztringet megjelent, az egyiket kisbets, a msikat
nagybets formban! A msodik sztringben tallhat sszes 'e' karaktert kicserli az els
sztring msodik karaktervel.
5.3. Mi lesz a kvetkez program outputja:

5.4. A kvetkez sorok kzl melyik fog hiba nlkl lefordulni?


a) "p"+"linka"
b) 3+"p"
c) 3+5
d) 3+5.5
5.5. Adj meg egy vals szmot. A szmot gy jelentsd meg, hogy a tizedespont helyn egy
tizedesvessz jelenjen meg!
6.1. Kszts programot, amely bekr egy szmot, majd kirja, hogy oszthat-e 2-vel vagy 3mal!

125

6.2. Kszts programot, amely bekr kt szmot s kirja, hogy melyik a nagyobb illetve ha
egyenlk, akkor azt.
6.3. Kszts programot, ami generl kt vletlen egsz szmot [0; 100] intervallumban. A
nagyobbik szmbl vonja ki a kisebbet, s rja ki a vgeredmnyt.
6.4. Kszts programot, ami egy szmformtumban megadott rdemjegyet szvegesen jelent
meg! Az rdemjegyet a billentyzeten kell bevinni! (pl. 1 = elgtelen; 2 = elgsges; stb.)
6.5. Kszts programot, ami bekri egy bankbett sszegt, valamint azt, hogy hny hnapig
lesz lektve az sszeg. Majd megjelenti, hogy mennyi lesz a bett sszege a lekts
vgn, ha a kamat vi 12%!
7.1. Kszts programot, amely egyms al hsszor kirja a J napot kvnok! szveget!
7.2. Kszts programot, amely 1-tl 10-ig kirja egymsmell, vesszvel elvlasztva a szmok
ngyzett!
7.3. rjl programot, ami 50 db kockadobst szimull, s kirja a dobsokat egyms mell,
szkzzel elvlasztva!
7.4. rjuk ki az 1-200 kztti szmok kzl azokat az 5-tel oszthatakat, amelyek nem
oszthatk 25-tel!
7.5. Krd be n rtkt s ksztsd el az albbi n soros hromszget!
1
1 2
1 2 3
...
1 2 3 n
8.1. rjl programot, amely a kvetkez tartalm tmbt hozza ltre, majd ki is rja a
kpernyre!
0
3
0

1
4
0

2
4
0

8.2. Kszts programot, amely egy 20 elem tmbt feltlt 'a' karakterekkel, majd a tmb
minden 2. elemt kicserli 'b' karakterre, majd kirja egymsmell az elemeket, szkzzel
elvlasztva!
8.3. Kszts programot, amely feltlt 1-tl 10-ig vletlen vals szmokkal egy 6x6-os tmbt,
majd megjelenti a tmb tartalmt! rja ki a program a szmok tlagt is!
8.4. rjl programot, amely az 5x5-s egysgmtrixot hozza ltre! (Az egysgmtrixban a
ftlbeli elemek 1-t, mg az ezen kvli elemek 0-t tartalmaznak.)

126

Minta:

8.5. Kszts programot, amely bekr a billentyzetrl 5 db szmot s elhelyezi egy megfelel
tmbben! A program rja is ki a tmb tartalmt a kpernyre, valamint jelenjen meg
kln a legkisebb szm is.
9.1. Krjnk be kt egsz szmot a billentyzetrl, s rjuk ki a kpernyre a szorzatukat!
9.2. A FileWriter s a FileReader osztlyok segtsgvel rjuk ki az abc.txt fljba
az angol abc kisbetit! Utna olvassuk be a fjlt, s az abc-t nagybetsre alaktva
rjuk ki a kpernyre!
9.3. A PrintWriter s a BufferedReader osztlyokat felhasznlva rjuk ki a ht
napjait soronknt a napok.txt szveges fjlba! Ezutn olvassuk be a fjlt, s a napokat
egy sorban, vesszvel elvlasztva jelentsk meg a kpernyn!
9.4. A RandomAccessFile osztly metdusai segtsgvel cserljk le az abc.txt fjl
minden 3. betjt nagybetsre, majd a teljes fjlt rjuk ki a kpernyre!
10.1. Jelentsk meg a kpernyn vesszvel elvlasztva a Fibonacci szmok els 20 elemt
ciklussal s a 21-30. elemt rekurzival! (A Fibonacci-szmok els kt eleme a 0 s az
1, a kvetkez elemek pedig az elz elemek sszege, teht 0, 1, 1, 2, 3, 5, 8, ...)
10.2. Ksztsk el a Vigenere tblt! Ez a 26*26-os tbla az angol abc betit tartalmazza a
kvetkez elrendezsben:

10.3. Krjnk be a felhasznltl egy magyar nyelv (kezetes betket is tartalmaz)


szveget! A beolvasott szveget kdoljuk t az albbiak szerint, majd rjuk ki a
kpernyre:

127

a magyar kezetes betket kezetmentesteni kell (pl. - a, - u)


csak az angol abc 26 betje s a szmjegyek szerepelhetnek a kdolt szvegben,

szkz vagy rsjelek nem


minden talaktott bet nagybets legyen
10.4. A szavak.txt szveges fjl els sora tartalmazza a fjlban lv szavak szmt.
Olvassuk be az sszes szt, majd rjuk ki a kpernyre a legrvidebb ill. a leghosszabb
szavak listjt! Ksztsnk statisztikt a szavak hosszsgnak gyakorisgrl!
11.1. Hozzunk ltre egy Dolgoz nev osztlyt a kvetkez tulajdonsgok reprezentlsra:
nv (szveg tpus)
szletsi_v (egsz szm tpus)
munkakr (szveg tpus)
fizets (egsz szm tpus)
adjvrs (logikai tpus)

11.2. Hozzunk ltre az osztlyunkhoz egy olyan paramteres konstruktort, amely segtsgvel
a pldnyosts sorn minden adattagnak kezdrtket adhatunk!
11.3. Pldnyostsuk az elz osztlyunkat! Hozzuk ltre az albbi objektumokat, majd a
megadott kdrszletet beszrva rassuk ki ket a kpernyre!
Kovcs Pter, 1966, igazgat, 500000, nem
Nagy rpd, 1954, ports, 100000, igen
Kiss P. Eszter, 1980, felad, 250000, nem

Beszrand kdrszlet:

11.4. Ksztsnk a plyakezd dolgozknak olyan konstruktort, ahol a fizets a minimlbrrel


egyezik meg (2010-ben ez 73.500 Ft), s az adjvrs alanyi jogon jrjon! Ezt a
konstruktort felhasznlva hozzuk ltre s rassuk ki a kvetkez tulajdonsgokkal
rendelkez objektumot: Sos Elemr, 1990, gyakornok.
12.1. Bvtsk tovbb az elz fejezet Dolgoz osztlyt Dolgoz2 nven! Hozzunk ltre
egy csak ebbl az osztlybl lthat osztlyvltozt, amely a dolgozk szmt
trolja! Gondoskodjunk arrl is, hogy pldny ltrejttekor automatikusan nvekedjen
az rtke! Ellenrizzk, hogy eddig hny dolgoz van!

128

12.2. Ksztsnk ms osztlybl nem lthat metdusokat a fizets emelshez! Az albbi


tpus fizetsemelsek lehetsgesek:
1. tpus: rendkvli fix 10.000 Ft-os emels
2. tpus: szzalkos emels a meglv fizets szzalkban
3. tpus: jogszably szerinti emels a minimlbr 10%-val
4. tpus: ltalnos adott sszeg fizetsemels

A minimlbr sszegt definiljuk vgleges osztlyvltozknt, s ennek megfelelen


mdostsuk a minimlbres konstruktort! A dolgozkat (d1, ... d4) rendre
rendkvli, 20%-os, jogszably szerinti, ill. 5.000 Ft-os ltalnos fizetsemelsben
rszestsk, majd jelentsk meg kpernyn a nevket s az j fizetsket! Mennyi lett
az j tlagfizets?
12.3. Hozzuk ltre az osztly paramter nlkli konstruktort, amely segtsgvel
pldnyostsunk egy jabb dolgozt! Adattagjai milyen rtkeket vettek fel? rjuk fell
ket a d4-es dolgoz adataival, kivve a nevet s a szletsi vet, amely Molnr Attila
(szl. 1985) legyen! rjunk egy pldnymetdust a nett fizets kiszmtsra! A
levonsok sszesen 45%-ot tesznek ki. Mennyi a nett bre az j dolgoznak?
12.4. rjuk meg a pldnyvltozk lekrdez s bellt metdusait! Hozzunk ltre osztly- s
pldny-inicializl blokkokat, amelyekben jelezzk, hogy a program futsa kzben
milyen inicializls trtnik! Ksztsnk egy osztlymetdust, amellyel a minimlrat
adott szzalkkal megnvelhetjk!
13.1. Ksztsnk megfelel osztlyhierarchit a hasb s a gmb felsznnek s trfogatnak
reprezentlsra. Kzs sosztlyuk neve legyen Test! A testek jellemz adatai (lek,
sugr cm-ben megadva) egsz tpusak legyenek, a szmtott rtkek pedig double
tpusak!
13.2. rjuk fell a kt leszrmazott osztly toString() metdust gy, hogy a pldnyaik
adattagjai s a kt metdusuk eredmnye az albbi formban jelenjenek meg (figyeljnk
a Gmb osztlynl az 1 tizedes kerektsre!):
Hasb (lei: 5, 10, 15 cm)
- felszne 550 cm2
- trfogata 750 cm3
Gmb (sugara: 10 cm)
- felszne 1256,6 cm2
- trfogata 3141,6 cm3
13.3. Definiljuk fell a Hasb osztly equals() metdust gy, hogy kt hasb csak
akkor legyen egyenl, ha leik hossza fggetlenl azok sorrendjtl megegyezik!
13.4. Definiljuk fell a Gmb osztly equals() metdust gy, hogy kt gmb csak akkor
legyen egyenl, ha sugaruk megegyezik. Ellenrizzk a metdus mkdst! Egsztsk

129

ki ennek az osztlynak a defincijt gy, hogy pldnyaik sugaruk nagysga alapjn


sszehasonlthatk legyenek!
14.1. Olvassunk be egy szmot a billentyzetrl s rjuk ki a ngyzetgykt! A kritikus
mveleteket tegyk try - catch blokkokba, s negatv szm bevitele esetn Negatv
szmbl nem lehet ngyzetgykt vonni! hibazenet jelenjen meg! A helyes eredmny
3 tizedes pontossg legyen!
14.2. Egsztsk ki a 9. fejezet io_token.java programjt gy, hogy hibs inputadatok
bevitele esetn is mkdjn, s csak az egsz szmokat adja ssze! A hibs adatok
NumberFormatException kivtelt vltanak ki. Elvlasztjel a szkz legyen! Pl. a
23 44,4 12 k 10 bemen adatokbl kiszrhet egsz szmok sszege 23+12+10=45
jelenjen meg a kpernyn! A vgeredmny mellett a hibs adatok is kerljenek kirsra!
14.3. Ksztsnk programot, amely a vissza.txt szvegfjlbl beolvassa a leghosszabb
magyar szt, majd mind elre, mind htrafel olvasva kirja kpernyre! A
fjlmveleteket lssuk el megfelel kivtelkezelssel (FileNotFoundException,
IOException)!
14.4. rjunk programot egy 3 db egsz szm trolsra szolgl sor adatszerkezet
modellezsre. Tpusa fix kezdet legyen, azaz a sor els eleme mindig a sor els
trhelyn helyezkedjen el! Implementljuk a sorba val behelyezst s a sorbl val
kivtelt gy, hogy e mveletek hibjnak lekezelsre sajt kivtelosztlyt hasznljunk,
s a hiba okt is jelentsk meg [5]!
15.1. Egsztsk ki a Szmtgp osztlyt egy olyan metdussal, amely a kvetkez
felttelek alapjn eldnti egy objektumrl, hogy korszer-e! Korszer, ha a processzor
sebessge minimum 1.6 GHz-es, a memria legalbb 2048 MB-os, valamint a
merevlemez nagyobb, mint 160 GB. Ezek a szmtgpek korszerek?
Szmtgp szg3: AMD, 2.8 GHz, 3072 MB, 500 GB
Szmtgp szg4: Intel, 2.6 GHz, 1024 MB, 320 GB

15.2. Szrmaztassunk a Notebook osztlybl egy Pda osztlyt! Az j osztly objektumai a


notebook tulajdonsgain kvl egy j egsz rtk sly adattaggal is rendelkeznek,
amely a pda slyt trolja grammban kifejezve. Ksztsnk az j adattaghoz lekrdez
s bellt metdust, valamint az osztlyhoz egy konstruktort, amellyel mindegyik
adattagjnak kezdrtk adhat!
15.3. Definiljuk fell a Pda osztly Notebook osztlytl rklt toString() metdust
gy, hogy az rkltek mellett a sly adattagot is jelentse meg, valamint a hdd
adattag neve HDD helyett httrtr legyen! Az albbi pda pldnyt hozzuk ltre, s
jelentsk meg a kpernyn!

Pda p1: Samsung, 0.4 GHz, 512 MB, 64 GB, 3 ra, 125 g

130

15.4. Mdostsuk a Szmtgp osztly korszer() metdust gy, hogy az albbi


felttelek teljeslse esetn a Notebook s a Pda osztly pldnyait is a
kategrijuknak megfelel paramterekhez viszonytva minsteni tudjuk! Jelentsk
meg a kpernyn a mr ltez nb1, nb2 s p1 pldnyok minstst!
Korszerek, ha teljestik az albbi paramtereket:
CPU sebessg (GHz) RAM (MB) Httrtr (GB) zemid (ra) Sly (g)
notebook
pda

>1

>=1024

>=120

>=3

>0.3

>=128

>=16

>=2.5

<150

131

9.2. Fogalomtr
Absztrakt osztly: Olyan osztly, amely nem pldnyosthat, mert van olyan metdusa,
amely nincs az adott osztlyban implementlva. Az implementls szrmaztats utn a
utdosztlyban trtnik meg.
Adatmez: Lsd adattag!
Adattag (attribtum, adatmez): Az osztlydefinci rsze, az osztly objektumainak
(pldnyainak) egyedi jellemzit, tulajdonsgait trol adattpus. Lehetnek pldnyszintek s
osztlyszintek is.
Aktulis paramterlista: Kifejezsek vesszvel elltott felsorolsa. Paramtertadsnl az
aktulis paramterek tpusnak rendre teht megfelel sorrendben, pronknt meg kell
egyeznie a formlis paramterlistban megadottakkal.
Attribtum: Lsd adattag!
Destruktor: A konstruktor ltal lefoglalt erforrsok felszabadtst vgzi. A Java-ban
automatikusan is megtrtnik, ha egy objektumra minden hivatkozs megsznik.
Dinamikus (ksi) kts: A hvott metdus futsidej hozzrendelse az objektumhoz.
Egysgbezrs: Adattagok s metdusok osztlyba trtn sszezrst jelenti. Egy
objektum (pldny) llapott (adattagjait) csak metdusai ltal mdosthatjuk.
Eljrs: Olyan metdus, amelynek nincs visszatrsi rtke.
Formlis paramterlista: Tpusokbl s szintaktikailag loklis vltoznak minsl
adattagokbl ll prosok, amelyek az aktulis paramterlista felptst meghatrozzk.
Fggvny: Olyan metdus, amelynek van visszatrsi rtke.
Kivtelkezels: A program futsa sorn keletkez hibk kiszrst megvalst olyan
programszerkezet, amelyben a tevkenysgeket vgz programkd hatrozottan elklnl az
azokban elfordul hibk lekezelst vgz programkdtl.
Konstruktor: Egy osztly olyan specilis metdusa, amely a pldnyostst vgzi. Egy
osztlynak tbb szigoran azonos nev konstruktora is lehet.
Metdus (mdszer): Az osztlydefinci rsze, az osztly objektumainak viselkedst ler
programrutin. Lsd mg osztlyszint metdus!
Metdus fellrsa: Azonos nev, de klnbz formlis paramterlistval rendelkez
metdusok. Dinamikus ktssel jn ltre.
Metdus tlterhelse: Azonos nev, de klnbz formlis paramterlistval rendelkez
metdusok. Statikus ktssel jn ltre.
Mdszer: Lsd metdus!

132

Objektum: Olyan programozsi eszkz, amelynek neve, adattagjai ltal reprezentlt llapota,
s metdusaival jellemzett viselkedse van. Egy osztly konstruktor ltali pldnyostsa
sorn jn ltre.
Objektum-orientlt programozs: Olyan programozsi paradigma, amely a programot
objektumokbl pti fel. Az objektumok viselkedse adja a program mkdst.
Osztly: Olyan felhasznli tpus (tervrajz), amely alapjn objektumok (pldnyok) hozhatk
ltre. Legfontosabb rszei a neve, adattagjainak s metdusainak defincija.
Osztlyszint adattag: Olyan adattag, amely egy osztlyon bell csak egyszer ltezik, s
maghoz az osztlyhoz kapcsoldik. Lsd mg pldnyszint adattag!
Osztlyszint metdus: Olyan metdus, amely kzvetlenl az osztlyhoz kapcsoldik, nem
pedig a pldnyokhoz. Az osztlymetdust az objektumok kzsen hasznlhatjk.
Osztlyvltoz: Lsd osztlyszint adattag!
rklds: Az jrafelhasznls eszkze. Leszrmazott (gyermek-, al-) osztly ltrehozsa
mr meglv (szl-, s-) osztlybl, amely sorn a leszrazott osztly rkli az sosztly
adattagjait s metdusait.
Paradigma: Szemlet- s gondolkodsmd, egy tudomnyos kzssg tagjai ltal elfogadott
rtkek s mdszerek sszessge.
Pldny: Lsd objektum!
Pldnyosts: Egy osztly objektumnak ellltsa konstruktor segtsgvel.
Pldnyszint adattag: Olyan adattag, amely egy osztly minden pldnyban egyedileg
ltezik, teht a pldnyhoz kapcsoldik. Lsd mg osztlyszint adattag!
Pldnyvltoz: Lsd adattag, pldnyszint adattag!
Polimorfizmus: Egyrszt jelenti a metdusok fellrst (dinamikus polimorfizmus,
jraimplementls), amely sorn egy leszrmazott osztlyban fellrjuk (mdostjuk) az
sosztly egy metdust, msrszt jelenti a metdusok tlterhelst (statikus polimorfizmus,
tbbalaksg), amikor egy osztlyon bell ugyanolyan nven tbb metdus is ltezik, s csak
formlis paramterlistjuk alapjn klnbztethetk meg. Statikus polimorfizmust valstanak
meg az osztlyok konstruktorai is.
Statikus (korai) kts: A hvott metdus fordtsidej hozzrendelse az objektumhoz.
zenet: Egy objektum metdusnak msik objektum ltal trtn meghvst jelenti. A
megszltott objektum a krs vgrehajtsval vlaszol az zenetre.
Vgleges osztly: Olyan osztly, amelynek metdusai nem definilhatk fell, gy az
rkltetsk sem valsthat meg.

133

10. Ksznetnyilvnts
Ksznetet mondunk mindazoknak, akik munknkat segtettk, s tancsokkal lttak el
bennnket.
Ksznjk csaldtagjainknak mindazt a megrtst s trelmet, amit a dolgozat
ksztse sorn tanstottak.

134

Vous aimerez peut-être aussi