{"id":2227,"date":"2018-02-26T22:25:47","date_gmt":"2018-02-26T21:25:47","guid":{"rendered":"http:\/\/www.webotlet.hu\/?p=2227"},"modified":"2018-02-28T12:45:56","modified_gmt":"2018-02-28T11:45:56","slug":"java-programozas-22-sajat-metodusok-avagy-ne-ismeteld-onmagad","status":"publish","type":"post","link":"https:\/\/www.webotlet.hu\/?p=2227","title":{"rendered":"Java programoz\u00e1s 22. &#8211; Saj\u00e1t met\u00f3dusok, avagy ne ism\u00e9teld \u00f6nmagad"},"content":{"rendered":"<h1>Saj\u00e1t met\u00f3dusok, avagy ne ism\u00e9teld \u00f6nmagad<\/h1>\n<p>Ezzel a leck\u00e9vel gyakorlatilag kib\u0151v\u00edtem az alap leck\u00e9kben szerepl\u0151 <a href=\"http:\/\/www.webotlet.hu\/?p=680\">Met\u00f3dusok<\/a> t\u00e9mak\u00f6rt. A programoz\u00e1si nyelv k\u00e9sz\u00edt\u0151i, mint m\u00e1r eml\u00edtettem, nagyon sok okos dolgot el\u0151re meg\u00edrtak, amelyeket haszn\u00e1lhatunk. Math oszt\u00e1ly, eml\u00e9kszel? A helyzet az, hogy \u0151k csak a legfontosabbakat \u00edrt\u00e1k meg, amelyekre sokaknak sz\u00fcks\u00e9g\u00fck van. Mi van akkor, ha van egy olyan r\u00e9szfeladatunk, amelyet t\u00f6bbsz\u00f6r is v\u00e9gre szeretn\u00e9nk hajtani egy feladat megold\u00e1sa sor\u00e1n. Gondoljunk csak arra, hogy egy t\u00f6mbbel k\u00fcl\u00f6nf\u00e9le m\u0171veleteket szeretn\u00e9nk v\u00e9gezni, \u00e9s a t\u00f6mb elemeit t\u00f6bbsz\u00f6r is ki szeretn\u00e9nk \u00edratni ellen\u0151rz\u00e9s c\u00e9lj\u00e1b\u00f3l. Minek \u00edrjuk meg sokszor ugyanazt a k\u00f3dot, ami ezt elv\u00e9gzi? \u00c9s ha v\u00e1ltoztatni szeretn\u00e9nk a ki\u00edrat\u00e1son? Nem egym\u00e1s al\u00e1, hanem egym\u00e1s mell\u00e9 szeretn\u00e9nk az elemeket ki\u00edrni. Mindenhol \u00e1t\u00edrjuk egyes\u00e9vel a println-t print-re? Logikusnak t\u0171nik, hogy ezt val\u00f3sz\u00edn\u0171leg hat\u00e9konyabban is megtehetj\u00fck.<\/p>\n<p>Eddig olyan programokat k\u00e9sz\u00edtett\u00fcnk, amelyek valamilyen adatokkal k\u00fcl\u00f6nf\u00e9le feladatokat oldottak meg. Ha sorban haladt\u00e1l a tananyagon, akkor m\u00e9g nem \u00edrtunk saj\u00e1t objektumokat, maximum fogalom szinten tal\u00e1lkoztunk vele. Mivel el\u0151fordulhat, hogy valaki ennek a leck\u00e9nek az anyag\u00e1ra k\u00edv\u00e1ncsi, fontosnak tartom r\u00f6gz\u00edteni a k\u00f6vetkez\u0151t:<\/p>\n<p><strong>Ebben a leck\u00e9ben csak olyan met\u00f3dusokkal foglalkozok, amelyeket egy olyan programban k\u00e9sz\u00edt\u00fcnk el, amelyik nem tartalmaz saj\u00e1t objektumokat, \u00e9s a programunk utas\u00edt\u00e1sait a main met\u00f3dusba \u00edrjuk. Ennek megfelel\u0151en a c\u00edmet is m\u00f3dos\u00edtom:<br \/>\n<\/strong><\/p>\n<h1>Saj\u00e1t met\u00f3dusok main met\u00f3dus mell\u00e9<\/h1>\n<h4>Met\u00f3dusok t\u00edpusai<\/h4>\n<p>Amikor saj\u00e1t met\u00f3dust akarunk \u00edrni, akkor valamilyen r\u00e9sz feladatot szeretn\u00e9nk kiemelni a k\u00f3dunkb\u00f3l egy k\u00fcl\u00f6n\u00e1ll\u00f3 egys\u00e9gbe. Ezt megtehetj\u00fck az\u00e9rt, hogy a k\u00f3d bonyolults\u00e1g\u00e1t cs\u00f6kkents\u00fck, ez\u00e9rt a feladat egy r\u00e9sz\u00e9t k\u00fcl\u00f6n v\u00e1lasztjuk. A gyakoribb ok azonban az, hogy valamilyen ism\u00e9tl\u0151d\u0151 r\u00e9szfeladatot akarunk kiemelni, hogy ne kelljen t\u00f6bbsz\u00f6r meg\u00edrni. Ilyenkor jav\u00edtani, v\u00e1ltoztatni is egyszer\u0171bb ezen, mivel a sok helyen haszn\u00e1latos k\u00f3dot egyszer \u00edrtuk meg, k\u00fcl\u00f6n kiemelve, a t\u00f6bbi helyen csak hivatkoztunk r\u00e1.<\/p>\n<p>A met\u00f3dusba kiemelt k\u00f3dokat formailag meglehet\u0151sen k\u00f6t\u00f6tt m\u00f3don kell meg\u00edrni. A <a href=\"http:\/\/www.webotlet.hu\/?p=680\">Met\u00f3dusok<\/a> leck\u00e9ben azt mondtam, hogy a met\u00f3dusok egyfajta \u00fczenetek, melyek a k\u00fcl\u00f6nf\u00e9le objektumok k\u00f6z\u00f6tti kommunik\u00e1ci\u00f3t (adatok lek\u00e9rdez\u00e9se, feladatok v\u00e9grehajt\u00e1s\u00e1nak k\u00e9r\u00e9se) val\u00f3s\u00edtj\u00e1k meg. Jelenleg a programjainkban saj\u00e1t objektumokkal m\u00e9g nem dolgozunk. A met\u00f3dusok csak a programunk f\u0151 r\u00e9sz\u00e9t alkot\u00f3 <strong>main<\/strong> met\u00f3dust eg\u00e9sz\u00edtik ki. Ezeket a k\u00f3dr\u00e9szeket a main el\u00e9 vagy ut\u00e1n kell meg\u00edrni. (Ez m\u00e1s programnyelvekben nem ennyire rugalmas.)<\/p>\n<p><strong>Met\u00f3dusokat alapvet\u0151en k\u00e9tf\u00e9le okb\u00f3l k\u00e9sz\u00edt\u00fcnk:<\/strong><\/p>\n<ol>\n<li>Valamilyen feladatot szeretn\u00e9nk vele megoldani \u00fagy, hogy a feladatnak nincs visszaadott eredm\u00e9nye.<\/li>\n<li>Valamilyen feladatot szeretn\u00e9nk vele megoldani, \u00e9s a feladatnak v\u00e9geredm\u00e9nye is lesz.<\/li>\n<\/ol>\n<p>Az els\u0151 eset lehetne egy ki\u00edrat\u00e1s, ahol a feladat csak annyi, hogy a k\u00e9perny\u0151n megjelenjen valami. A m\u00e1sodik esetben valamilyen sz\u00e1m\u00edt\u00e1si m\u0171veletet hajtunk v\u00e9gre a met\u00f3dussal, aminek a c\u00e9lja, hogy a met\u00f3dus egy eredm\u00e9nyt \u00e1ll\u00edtson el\u0151. Nagyon fontos a mondatban az egy sz\u00f3, mert a met\u00f3dus csakis egyetlen eredm\u00e9nyt adhat vissza. Ez az egyetlen visszaadott eredm\u00e9ny a <strong>visszat\u00e9r\u00e9si \u00e9rt\u00e9k<\/strong>.<\/p>\n<p>K\u00e9t konkr\u00e9t p\u00e9ld\u00e1val \u00e9lve az els\u0151 eset legyen az, hogy n\u00e9ha ki kell rajzolnunk egy fix hossz\u00fas\u00e1g\u00fa v\u00edzszintes vonalat a k\u00e9perny\u0151re, a m\u00e1sodik esetben pedig tegy\u00fck fel, hogy a programunknak n\u00e9ha sz\u00fcks\u00e9ge lesz egy v\u00e9letlen sz\u00e1mra egy adott intervallumb\u00f3l. Nem c\u00e9lszer\u0171 a vonal rajzol\u00e1st vagy v\u00e9letlen sz\u00e1m sorsol\u00e1st \u00fajra \u00e9s \u00fajra meg\u00edrni, ez\u00e9rt k\u00e9sz\u00edt\u00fcnk egy-egy met\u00f3dust, aminek annyi a feladata, hogy ha kiadjuk neki a parancsot, v\u00e9gezze el ezeket a feladatokat. A k\u00e9t p\u00e9ld\u00e1ban felsorolt met\u00f3dusok minden esetben ugyanazon bels\u0151 utas\u00edt\u00e1saik szerint v\u00e9gzik el a feladatukat, nem tudom befoly\u00e1solni a m\u0171k\u00f6d\u00e9s\u00fcket. Hiszen mindig ugyanolyan vonalat akarok rajzoltatni, \u00e9s mindig adott intervallumb\u00f3l kell v\u00e9letlen sz\u00e1m.<\/p>\n<p>Ahhoz, hogy a met\u00f3dusok m\u0171k\u00f6d\u00e9s\u00e9re hat\u00e1ssal legyek, a met\u00f3dusoknak bemen\u0151 adatokat is kapniuk kell, ami megv\u00e1ltoztatja a bels\u0151 utas\u00edt\u00e1sok v\u00e9grehajt\u00e1s\u00e1t. Ezeket a bemen\u0151 adatok a <strong>param\u00e9terek<\/strong> (v\u00e1ltoz\u00f3k)<strong>.<\/strong> Tegy\u00fck fel nem csak egy vonalat szeretn\u00e9nk kirajzolni &#8211; jelekb\u0151l, hanem a ki\u00edrat\u00e1ssal egy t\u00f6mb elemeit szeretn\u00e9m megjelen\u00edteni a k\u00e9perny\u0151n. Vagy nem mindig ugyanabb\u00f3l az intervallumb\u00f3l k\u00e9rek v\u00e9letlen sz\u00e1mot, hanem odaadom a feladatot elv\u00e9gz\u0151 met\u00f3dusnak az intervallum hat\u00e1rait (als\u00f3-fels\u0151), amib\u0151l sorsolnia kell. A met\u00f3dusnak odaadott param\u00e9terek sz\u00e1ma tetsz\u0151leges lehet. Ha \u00edgy n\u00e9zz\u00fck a dolgot, akkor a m\u00e1r n\u00e9gyf\u00e9le alkalmaz\u00e1si m\u00f3dn\u00e1l j\u00e1runk:<\/p>\n<ol>\n<li>Egy feladat v\u00e9grehajt\u00e1s\u00e1t k\u00e9rj\u00fck t\u0151le visszat\u00e9r\u00e9si \u00e9rt\u00e9k n\u00e9lk\u00fcl, param\u00e9terek n\u00e9lk\u00fcl.<\/li>\n<li>Egy feladat v\u00e9grehajt\u00e1s\u00e1t k\u00e9rj\u00fck t\u0151le visszat\u00e9r\u00e9si \u00e9rt\u00e9k n\u00e9lk\u00fcl, param\u00e9terek seg\u00edts\u00e9g\u00e9vel.<\/li>\n<li>Egy visszat\u00e9r\u00e9si \u00e9rt\u00e9ket k\u00e9r\u00fcnk t\u0151le param\u00e9terek n\u00e9lk\u00fcl.<\/li>\n<li>Egy visszat\u00e9r\u00e9si \u00e9rt\u00e9ket t\u0151le param\u00e9terek seg\u00edts\u00e9g\u00e9vel.<\/li>\n<\/ol>\n<p>L\u00e1ssunk akkor p\u00e9ld\u00e1kat a fent felsorolt alkalmaz\u00e1si m\u00f3dra:<\/p>\n<ol>\n<li value=\"1\">Szeretn\u00e9nk egy met\u00f3dust k\u00e9sz\u00edteni, ami kirajzol egy &#8212; jelekb\u0151l \u00e1ll\u00f3 vonalat az egyes feladatok elv\u00e1laszt\u00e1s\u00e1ra<\/li>\n<\/ol>\n<pre class=\"brush: java; gutter: true; title: ; notranslate\" title=\"\">\r\npublic static void vonal()\r\n{\r\n  System.out.println(&quot;-----&quot;);\r\n}\r\n<\/pre>\n<ol>\n<li value=\"2\">Szeretn\u00e9nk egy met\u00f3dust k\u00e9sz\u00edteni, mely egy kapott t\u00f6mb elemeit ki\u00edrja a k\u00e9perny\u0151re.<\/li>\n<\/ol>\n<pre class=\"brush: java; gutter: true; title: ; notranslate\" title=\"\">\r\npublic static void kiir( int&#x5B;] tomb )\r\n{\r\n  for( int i = 0; i &lt; tomb.length; i++ )\r\n  {\r\n    System.out.println(tomb&#x5B;i]+&quot; &quot;);\r\n  }\r\n  System.out.println();\r\n}\r\n<\/pre>\n<ol>\n<li value=\"3\">Szeretn\u00e9nk egy met\u00f3dust k\u00e9sz\u00edteni, amely visszaad egy v\u00e9letlen sz\u00e1mot a [-10;30] intervallumb\u00f3l.<\/li>\n<\/ol>\n<pre class=\"brush: java; gutter: true; title: ; notranslate\" title=\"\">\r\npublic static int veletlen()\r\n{\r\n  int szam;\r\n  szam = (int)(Math.random()*41)-10;\r\n\r\n  return szam;\r\n}\r\n<\/pre>\n<ol>\n<li value=\"4\">Szeretn\u00e9nk egy met\u00f3dust k\u00e9sz\u00edteni, amely k\u00e9t kapott sz\u00e1m \u00e1tlag\u00e1t adja vissza eredm\u00e9nyk\u00e9nt.<\/li>\n<\/ol>\n<pre class=\"brush: java; gutter: true; title: ; notranslate\" title=\"\">\r\npublic static double atlag( int szam1, int szam2 )\r\n{\r\n\r\n  double atl = (szam1+szam2 )\/2.0;\r\n\r\n  return atl;\r\n}\r\n<\/pre>\n<p>Ez a n\u00e9gy p\u00e9lda alapvet\u0151en lefedi a met\u00f3dusok alapt\u00edpusait. L\u00e1thatod, hogy a kapott adatok darabsz\u00e1ma tetsz\u0151leges, a 2. p\u00e9ld\u00e1ban egyetlen adatot kap a met\u00f3dus (a t\u00f6mb\u00f6t, aminek az elemeit ki kell \u00edrnia), a 4. p\u00e9ld\u00e1ban pedig a k\u00e9t sz\u00e1mot, amelyek \u00e1tlaga lesz a visszaadott eredm\u00e9ny. T\u00f6bb adatot is adhatok neki, de eml\u00e9kezz r\u00e1: minden esetben egyetlen visszat\u00e9r\u00e9si \u00e9rt\u00e9k kell.<\/p>\n<h4>Met\u00f3dusok r\u00e9szei<\/h4>\n<p>A met\u00f3dust alapvet\u0151en k\u00e9t r\u00e9szre bonthatjuk, fejre \u00e9s t\u00f6rzsre, valamint a fej m\u00e9g tov\u00e1bb bonthat\u00f3. L\u00e1ssuk mi micsoda:<\/p>\n<p><a href=\"http:\/\/www.webotlet.hu\/wp-content\/uploads\/2018\/02\/metodus_reszei_full.jpg\" data-rel=\"lightbox-image-0\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2332\" src=\"http:\/\/www.webotlet.hu\/wp-content\/uploads\/2018\/02\/metodus_reszei_full.jpg\" alt=\"\" width=\"670\" height=\"370\" srcset=\"https:\/\/www.webotlet.hu\/wp-content\/uploads\/2018\/02\/metodus_reszei_full.jpg 1280w, https:\/\/www.webotlet.hu\/wp-content\/uploads\/2018\/02\/metodus_reszei_full-300x166.jpg 300w, https:\/\/www.webotlet.hu\/wp-content\/uploads\/2018\/02\/metodus_reszei_full-768x424.jpg 768w, https:\/\/www.webotlet.hu\/wp-content\/uploads\/2018\/02\/metodus_reszei_full-1024x566.jpg 1024w\" sizes=\"auto, (max-width: 670px) 100vw, 670px\" \/><\/a><\/p>\n<p>A met\u00f3dusok k\u00fcl\u00f6nf\u00e9le r\u00e9szeit a fent felsorolt p\u00e9ld\u00e1kon kereszt\u00fcl mutatn\u00e1m be:<\/p>\n<ul>\n<li><strong>public:<\/strong> A met\u00f3dusokn\u00e1l k\u00fcl\u00f6nf\u00e9le m\u00f3dos\u00edt\u00f3kat, p\u00e9ld\u00e1ul hozz\u00e1f\u00e9r\u00e9si szintet adhatunk meg, hogy az adott met\u00f3dust milyen k\u00f3d haszn\u00e1lhatja. Ebbe most r\u00e9szletesen nem menn\u00e9k bele, egyel\u0151re fogadjuk el, hogy a public olyan hozz\u00e1f\u00e9r\u00e9st biztos\u00edt, hogy ak\u00e1rmilyen k\u00f3d haszn\u00e1lhatja ezt a met\u00f3dust. A public kulcssz\u00f3 ak\u00e1r el is hagyhat\u00f3, de a hi\u00e1nya is egyfajta jogosults\u00e1gi szintet jelent. Egy\u00e9b m\u00f3dos\u00edt\u00f3k is l\u00e9teznek, ezekr\u0151l k\u00e9s\u0151bbi leck\u00e9ben \u00edrok.<\/li>\n<li><strong>static:<\/strong> K\u00f6telez\u0151, ha a main-ben meg\u00edrt k\u00f3djainkat szeretn\u00e9nk kieg\u00e9sz\u00edteni a met\u00f3dusokkal. N\u00e9lk\u00fcle a k\u00f3d szintaktikai hib\u00e1t tartalmaz. A saj\u00e1t objektumokba \u00edrt met\u00f3dusokn\u00e1l nagyon nem mindegy, hogy haszn\u00e1ljuk-e a <strong>static<\/strong> kulcssz\u00f3t, vagy sem. Err\u0151l szint\u00e9n egy k\u00e9s\u0151bbi lecke sz\u00f3l majd.<\/li>\n<li><strong>visszat\u00e9r\u00e9si \u00e9rt\u00e9k t\u00edpusa<\/strong>: A static ut\u00e1n meg kell adni, hogy a met\u00f3dusnak van-e visszat\u00e9r\u00e9si \u00e9rt\u00e9ke, vagy nincs. Ha van, akkor a visszat\u00e9r\u00e9si \u00e9rt\u00e9k t\u00edpus\u00e1t kell megadni (3-4 p\u00e9ld\u00e1k), ha nincs, akkor a void kulcssz\u00f3t kell haszn\u00e1lni (1-2 p\u00e9ld\u00e1k). Az \u00e1br\u00e1n v\u00f6r\u00f6s ny\u00edllal kiemeltem, hogy ezeknek a t\u00edpusoknak k\u00f6telez\u0151en egyeznie kell!<\/li>\n<li><strong>met\u00f3dus neve:<\/strong> A met\u00f3dus neve a n\u00e9vad\u00e1si szab\u00e1lyoknak megfelel\u0151en b\u00e1rmi lehet, de illik olyan nevet adni, ami utal arra, hogy a met\u00f3dus milyen feladatot l\u00e1t el. A n\u00e9v jellemz\u0151en egyedi, de bizonyos k\u00f6r\u00fclm\u00e9nyek egy\u00fctt\u00e1ll\u00e1sa eset\u00e9n azonos nevek is megengedettek, ezekr\u0151l a felsorol\u00e1s ut\u00e1n \u00edrok. A met\u00f3dusok nev\u00e9n\u00e9l is illik haszn\u00e1lni a camelCase elvet, vagyis t\u00f6bb sz\u00f3b\u00f3l \u00e1ll\u00f3 nevek eset\u00e9n az els\u0151 sz\u00f3 kisbet\u0171vel kezd\u0151dik, ut\u00e1na minden sz\u00f3 kezd\u0151bet\u0171je nagybet\u0171.<\/li>\n<li><strong>z\u00e1r\u00f3jelek: <\/strong>K\u00f6telez\u0151 formai elemek, de csak akkor kell szerepeltetni benne valamit, ha a met\u00f3dus param\u00e9tert vagy param\u00e9tereket kap.<\/li>\n<li><strong>param\u00e9terek:<\/strong> Amennyiben sz\u00fcks\u00e9g van r\u00e1juk, minden param\u00e9tert t\u00edpussal \u00e9s n\u00e9vvel kell megadni a z\u00e1r\u00f3jelen bel\u00fcl, vessz\u0151kkel elv\u00e1lasztva. A param\u00e9ter t\u00edpus\u00e1nak a hozz\u00e1tartoz\u00f3 \u00e9rt\u00e9khez passzolnia kell, neve a n\u00e9vad\u00e1si szab\u00e1lyoknak megfelel\u0151en b\u00e1rmi lehet. A kapott param\u00e9ter hat\u00f3k\u00f6re a met\u00f3dus blokkj\u00e1ra korl\u00e1toz\u00f3dik, csak a met\u00f3duson bel\u00fcl \u00e9rtelmezett. A v\u00e1ltoz\u00f3 \u00e9rt\u00e9k\u00e9t csak a met\u00f3dusban lehet haszn\u00e1lni. M\u00e1s met\u00f3dusokban is haszn\u00e1lhatjuk ugyanezt a v\u00e1ltoz\u00f3nevet, ezek k\u00f6z\u00f6tt nincs \u00e1tfed\u00e9s, nincs hat\u00e1suk egym\u00e1sra. A kapott param\u00e9ter neve meg is egyezhet a met\u00f3dus nev\u00e9vel, de szerintem az egyez\u00e9st c\u00e9lszer\u0171 ker\u00fclni.<\/li>\n<li><strong>blokk:<\/strong> A met\u00f3dusnak egy speci\u00e1lis esetet lesz\u00e1m\u00edtva k\u00f6telez\u0151 blokkot nyitni. A blokkba \u00edrjuk meg azokat az utas\u00edt\u00e1sokat, amelyek a feladatot v\u00e9grehajtj\u00e1k, vagy el\u0151\u00e1ll\u00edtj\u00e1k az eredm\u00e9nyt.<\/li>\n<li><strong>return: <\/strong>Amennyiben a met\u00f3dusnak van visszat\u00e9r\u00e9si \u00e9rt\u00e9ke, a blokknak mindenk\u00e9ppen tartalmaznia kell legal\u00e1bb egy return sz\u00f3val kezd\u0151d\u0151 utas\u00edt\u00e1st, ami ut\u00e1n szerepelnie kell annak a v\u00e1ltoz\u00f3nak, \u00e9rt\u00e9knek, kifejez\u00e9snek, amely az eredm\u00e9nyt hat\u00e1rozza meg. Ha a blokkon bel\u00fcl t\u00f6bb felt\u00e9telhez k\u00f6t\u00f6tt \u00e1g is tal\u00e1lhat\u00f3, biztos\u00edtani kell, hogy return utas\u00edt\u00e1ssal mindenk\u00e9ppen tal\u00e1lkozzon a v\u00e9grehajt\u00e1s. Visszat\u00e9r\u00e9si \u00e9rt\u00e9k n\u00e9lk\u00fcli (void) t\u00edpus\u00fa met\u00f3dus eset\u00e9n is haszn\u00e1lhat\u00f3 return utas\u00edt\u00e1s. Ilyenkor a return ut\u00e1n csak a lez\u00e1r\u00f3 pontosvessz\u0151 \u00e1llhat. A szerepe az, hogy a met\u00f3dus v\u00e9grehajt\u00e1sa azonnal v\u00e9get \u00e9r, \u00e9s a return ut\u00e1ni utas\u00edt\u00e1sok v\u00e9grehajt\u00e1sa nem t\u00f6rt\u00e9nik meg. A vez\u00e9rl\u00e9s ebben az esetben azonnal visszaker\u00fcl a met\u00f3dust h\u00edv\u00f3 utas\u00edt\u00e1shoz.<\/li>\n<\/ul>\n<h4>Met\u00f3dus szignat\u00far\u00e1ja<\/h4>\n<p>A met\u00f3dus neve, a param\u00e9terek t\u00edpusai, darabsz\u00e1ma, \u00e9s azok sorrendje egy\u00fcttesen a <strong>met\u00f3dus szignat\u00far\u00e1ja<\/strong>. A met\u00f3dusoknak csak a szignat\u00far\u00e1ja kell, hogy egyedi legyen! Az adott k\u00f3dban teh\u00e1t l\u00e9tezhetnek azonos nev\u0171 met\u00f3dusok, de csak akkor, ha ezek szignat\u00far\u00e1ja k\u00fcl\u00f6nb\u00f6zik. Ezt nevezz\u00fck a <strong>met\u00f3dus<\/strong> <strong>t\u00falterhel\u00e9s<\/strong>\u00e9nek. L\u00e1ssunk erre n\u00e9h\u00e1ny p\u00e9ld\u00e1t:<\/p>\n<pre class=\"brush: java; gutter: true; title: ; notranslate\" title=\"\">\r\npublic static void vonal()\r\n{\r\n  System.out.println(&quot;----------&quot;);\r\n}\r\n\r\npublic static void vonal( int szam )\r\n{\r\n  for( int i = 0; i &lt; szam; i++ )\r\n  {\r\n    System.out.print(&quot;-&quot;);\r\n  }\r\n  System.out.println();\r\n}\r\n\r\npublic static void vonal( int szam, char c )\r\n{\r\n  for( int i = 0; i &lt; szam; i++ )\r\n  {\r\n    System.out.print(c);\r\n  }\r\n  System.out.println();\r\n}\r\n\r\npublic static void vonal( char c, int szam )\r\n{\r\n  for( int i = 0; i &lt; szam; i++ )\r\n  {\r\n    System.out.print(c);\r\n  }\r\n  System.out.println();\r\n}\r\n<\/pre>\n<p>A n\u00e9gy met\u00f3dus azonos n\u00e9ven szerepel, de az els\u0151nek nincs param\u00e9tere, a m\u00e1sodik egy sz\u00e1mot kap, ami meghat\u00e1rozza, hogy milyen hossz\u00fa vonalat rajzoljon ki a k\u00e9perny\u0151re, a harmadik megkapja a vonal hossz\u00e1t, \u00e9s hogy milyen karakterekb\u0151l rajzolja ki a vonalat. A negyedik met\u00f3dus kakukktoj\u00e1s. L\u00e1tszik, hogy ugyanazt a feladatot v\u00e9gzi el, mint a harmadik met\u00f3dus, a param\u00e9terei darabsz\u00e1mra \u00e9s t\u00edpusra is megegyeznek. Egyetlen dologban k\u00fcl\u00f6nb\u00f6znek, a param\u00e9terek sorrendj\u00e9ben. Ez szignat\u00fara szempontj\u00e1b\u00f3l k\u00fcl\u00f6nbs\u00e9g, ennek megfelel\u0151en a k\u00e9t utols\u00f3 met\u00f3dus l\u00e9tezhet egym\u00e1s mellett, m\u00e9g akkor is, ha sok \u00e9rtelme ebben a form\u00e1ban nincs. A szignat\u00fara nem tartalmazza a v\u00e1ltoz\u00f3k neveit. Ennek megfelel\u0151en adjuk meg a fenti met\u00f3dusok szignat\u00far\u00e1j\u00e1t:<\/p>\n<pre class=\"brush: java; gutter: true; title: ; notranslate\" title=\"\">\r\nvonal()\r\nvonal( int )\r\nvonal( int, char )\r\nvonal( char, int )\r\n<\/pre>\n<p>Ha a v\u00e1ltoz\u00f3neveket a defin\u00edci\u00f3nak megfelel\u0151en figyelmen k\u00edv\u00fcl hagyjuk, ilyen met\u00f3dusok nem l\u00e9tezhetnek egym\u00e1s mellett:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\npublic static void vonal( int szam, char c)\r\n{\r\n  ...\r\n}\r\n\r\npublic static void vonal( int hossz, char mibol )\r\n{\r\n  ...\r\n}\r\n<\/pre>\n<p>Hi\u00e1ba m\u00e1sok a param\u00e9terek nevei, ha azok t\u00edpusra, darabsz\u00e1mra \u00e9s sorrendre megegyeznek, a met\u00f3dusok nevei is ugyanazok, vagyis szignat\u00fara szerint nem k\u00fcl\u00f6nb\u00f6znek.<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\npublic static void vonal( int hossz, String mibol )\r\n{\r\n  ...\r\n}\r\n<\/pre>\n<p>Az fenti p\u00e9lda viszont k\u00fcl\u00f6nb\u00f6zik a k\u00e9t el\u0151z\u0151t\u0151l. Hi\u00e1ba egyezik meg az el\u0151z\u0151 m\u00e1sodik p\u00e9ld\u00e1val a met\u00f3dus neve, param\u00e9terek darabsz\u00e1ma, sorrendje, m\u00e9g a neve is, ha a <i>mibol<\/i> param\u00e9ter t\u00edpusa elt\u00e9r\u0151. Az m\u00e1s k\u00e9rd\u00e9s, hogy ki\u00edrat\u00e1s szempontj\u00e1b\u00f3l majdnem mindegy, hogy karakterekb\u0151l vagy Stringek-b\u0151l rajzolom ki a vonalat. (Val\u00f3j\u00e1ban az\u00e9rt jelent\u0151s k\u00fcl\u00f6nbs\u00e9g van k\u00f6z\u00f6tt\u00fck). Akkor is m\u00e1s a szignat\u00fara, vagyis l\u00e9tezhetnek egym\u00e1s mellett.<\/p>\n<h4>Met\u00f3dusok h\u00edv\u00e1sa<\/h4>\n<p>Met\u00f3dusok haszn\u00e1lata nem k\u00f6telez\u0151, de sok esetben k\u00e9ts\u00e9gtelen\u00fcl hat\u00e9konyabb vagy \u00e1tl\u00e1that\u00f3bb a programunk, ha alkalmazzuk \u0151ket. N\u00e9zz\u00fck hogyan haszn\u00e1ljuk \u0151ket. A met\u00f3dusok haszn\u00e1lat\u00e1t h\u00edv\u00e1snak nevezz\u00fck. A h\u00edv\u00e1s els\u0151 l\u00e9p\u00e9se a met\u00f3dus megsz\u00f3l\u00edt\u00e1sa. A met\u00f3dusra a nev\u00e9vel hivatkozunk, aminek c\u00e9lszer\u0171 egyedinek lennie. Megsz\u00f3l\u00edtjuk a neve alapj\u00e1n a k\u00edv\u00e1nt met\u00f3dust, valamint ha vannak param\u00e9terei, akkor t\u00edpushelyesen odaadjuk neki a szignat\u00far\u00e1nak megfelel\u0151 sorrendben. Adhatunk neki v\u00e1ltoz\u00f3kat, direkt \u00e9rt\u00e9keket, vagy kifejez\u00e9seket is. Ha egy met\u00f3dus k\u00e9t eg\u00e9sz sz\u00e1mot k\u00e9r, akkor odaadhatunk neki k\u00e9t eg\u00e9sz v\u00e1ltoz\u00f3t (a benne l\u00e9v\u0151 \u00e9rt\u00e9keket), megadhatunk k\u00e9t \u00e1ltalunk megadott sz\u00e1mot, vagy ak\u00e1r keverhetj\u00fck is a kett\u0151t, odaadunk egy sz\u00e1mot \u00e9s egy v\u00e1ltoz\u00f3t. A l\u00e9nyeg a t\u00edpushelyess\u00e9g \u00e9s a sorrend.<\/p>\n<p>L\u00e1ssunk akkor p\u00e9ld\u00e1kat met\u00f3dus h\u00edv\u00e1sokra az alkalmaz\u00e1si m\u00f3dokn\u00e1l felsorolt p\u00e9ld\u00e1knak megfelel\u0151en:<\/p>\n<ol>\n<li value=\"1\">Ki szeretn\u00e9k \u00edratni egy 5 egys\u00e9g hossz\u00fa vonalat &#8211; jelekb\u0151l a meg\u00edrt met\u00f3dus haszn\u00e1lat\u00e1val:<\/li>\n<\/ol>\n<pre class=\"brush: java; gutter: true; title: ; notranslate\" title=\"\">\r\nvonal();\r\n<\/pre>\n<ol>\n<li value=\"2\">Ki szeretn\u00e9m \u00edrni egy t\u00f6mb elemeit a k\u00e9perny\u0151re egym\u00e1s mell\u00e9 sz\u00f3k\u00f6z\u00f6kkel elv\u00e1lasztva:<\/li>\n<\/ol>\n<pre class=\"brush: java; gutter: true; title: ; notranslate\" title=\"\">\r\nkiir(tomb);\r\n<\/pre>\n<ol>\n<li value=\"3\">Szeretn\u00e9k egy v\u00e9letlen sz\u00e1mot kisorsolni a [-10;30] intervallumb\u00f3l.<\/li>\n<\/ol>\n<pre class=\"brush: java; gutter: true; title: ; notranslate\" title=\"\">\r\nint szam = veletlen(); \/\/ sorsolom \u00e9s elt\u00e1rolom\r\nSystem.out.println( veletlen() ); \/\/ sorsolom \u00e9s ki\u00edrom\r\n<\/pre>\n<ol>\n<li value=\"4\">Ki szeretn\u00e9m sz\u00e1molni k\u00e9t sz\u00e1m \u00e1tlag\u00e1t.<\/li>\n<\/ol>\n<pre class=\"brush: java; gutter: true; title: ; notranslate\" title=\"\">\r\nint szam = 3;\r\ndouble atlag = atlag( 4, szam );\r\n<\/pre>\n<p>L\u00e1thatod, hogy a p\u00e9ld\u00e1kban gyakorlatilag csak a szignat\u00fara szerepel. meg kell adni a met\u00f3dus nev\u00e9t, \u00e9s oda kell neki adni a m\u0171k\u00f6d\u00e9s\u00e9hez sz\u00fcks\u00e9ges adatokat direkt \u00e9rt\u00e9kek, v\u00e1ltoz\u00f3k vagy kifejez\u00e9sek form\u00e1j\u00e1ban. Amikor a met\u00f3dusnak nincs visszat\u00e9r\u00e9si \u00e9rt\u00e9ke (void t\u00edpus\u00fa), akkor a met\u00f3dus h\u00edv\u00e1s egyetlen utas\u00edt\u00e1sk\u00e9nt \u00f6nmag\u00e1ban \u00e1ll. Nem r\u00e9sze \u00e9rt\u00e9kad\u00e1snak, vagy valamilyen kifejez\u00e9snek (pl \u00f6sszef\u0171z\u00e9s egy ki\u00edrat\u00e1sban). Amikor azonban van visszat\u00e9r\u00e9si \u00e9rt\u00e9k, azzal kezdeni kell valamit, k\u00fcl\u00f6nben nem lenne \u00e9rtelme az eredm\u00e9nynek. Elt\u00e1roljuk egy v\u00e1ltoz\u00f3ban, k\u00f6zvetlen\u00fcl ki\u00edrjuk a met\u00f3dus eredm\u00e9ny\u00e9t a k\u00e9perny\u0151re, stb.<\/p>\n<h4>Param\u00e9terk\u00e9nt \u00e1tadott t\u00f6mb\u00f6k, list\u00e1k<\/h4>\n<p>A met\u00f3dusoknak sokszor v\u00e1ltoz\u00f3kat adunk \u00e1t param\u00e9terk\u00e9nt. A Java nyelvben ilyenkor a v\u00e1ltoz\u00f3k v\u00e1ltoz\u00f3k \u00e9rt\u00e9ke ker\u00fcl \u00e1tad\u00e1sra. Nem tudunk olyat megtenni, hogy az \u00e1tadott v\u00e1ltoz\u00f3 \u00e9rt\u00e9ke az eredeti helyen m\u00f3dosuljon.<\/p>\n<p>L\u00e1ssunk egy p\u00e9ld\u00e1t, mir\u0151l is besz\u00e9lek.<\/p>\n<pre class=\"brush: java; gutter: true; highlight: [1,2,3,4,5,11,12,13]; title: ; notranslate\" title=\"\">\r\npublic static int duplaz( int szam )\r\n{\r\n  szam = szam * 2;\r\n  return szam;\r\n}\r\n\r\n\/\/ met\u00f3dus h\u00edv\u00e1s valahol a main-ben:\r\npublic static void main( String&#x5B;] args )\r\n{\r\n  int egesz = 4;\r\n  int ketszeres = duplaz(egesz);\r\n  System.out.println(egesz);\r\n  System.out.println(ketszeres);\r\n}\r\n<\/pre>\n<ul>\n<li>1-5: A met\u00f3dusunk csak annyit tesz, hogy kapott sz\u00e1m dupl\u00e1j\u00e1t adja vissza.<\/li>\n<li>11: Ha a main-en bel\u00fcl egy sz\u00e1mot elt\u00e1rolok egy <em>egesz<\/em> nev\u0171 v\u00e1ltoz\u00f3ba, majd odaadom a met\u00f3dusnak, az eredm\u00e9nyt pedig elt\u00e1rolom egy m\u00e1sik v\u00e1ltoz\u00f3ba,<\/li>\n<li>12: akkor az eredetileg \u00e1tadott v\u00e1ltoz\u00f3 \u00e9rt\u00e9ke nem v\u00e1ltozik meg,<\/li>\n<li>13: a met\u00f3dus eredm\u00e9nye viszont az eredeti k\u00e9tszerese lesz.<\/li>\n<\/ul>\n<p>A t\u00f6mb\u00f6kkel \u00e9s list\u00e1kkal kicsit kacif\u00e1ntosabb a helyzet. Amikor l\u00e9trehozzuk ezeket, a mem\u00f3ri\u00e1ban l\u00e9trej\u00f6n az adatszerkezet. Ha ezt hozz\u00e1rendelj\u00fck egy v\u00e1ltoz\u00f3hoz, akkor nem az elemeket t\u00e1roljuk el benne, hanem azt a mem\u00f3riac\u00edmet, ahol a t\u00f6mb vagy lista elemei val\u00f3j\u00e1ban megtal\u00e1lhat\u00f3ak. Ha ezt \u00e1tadjuk\u00a0 egy met\u00f3dusnak, akkor val\u00f3j\u00e1ban a v\u00e1ltoz\u00f3 \u00e9rt\u00e9kek\u00e9nt a mem\u00f3riac\u00edmet kapja meg! Mi\u00e9rt gond ez?<\/p>\n<p>N\u00e9zz\u00fck ezt a komplexebb p\u00e9ld\u00e1t. Kellene egy met\u00f3dus, ami ki\u00edr egy kapott t\u00f6mb\u00f6t, \u00e9s kell egy met\u00f3dus, ami egy kapott t\u00f6mb\u00f6t n\u00f6vekv\u0151 sorrendbe rendez:<\/p>\n<pre class=\"brush: java; gutter: true; highlight: [5,6,7,8,9,10,11,12,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,43]; title: ; notranslate\" title=\"\">\r\npackage tomb;\r\n\r\npublic class Tomb\r\n{\r\n  public static void kiir( int&#x5B;] tomb )\r\n  {\r\n    for( int i = 0; i &lt; tomb.length; i++ )\r\n    {\r\n      System.out.print(tomb&#x5B;i]+&quot; &quot;);\r\n    }\r\n    System.out.println();\r\n  }\r\n  \r\n  public static int&#x5B;] rendezNovekvo( int&#x5B;] tomb )\r\n  {\r\n    int csere;\r\n    for( int i = 0; i &lt; tomb.length-1; i++ )\r\n    {\r\n      for( int j = i+1; j &lt; tomb.length; j++ )\r\n      {\r\n        if( tomb&#x5B;i] &gt; tomb&#x5B;j] )\r\n        {\r\n          csere = tomb&#x5B;i];\r\n          tomb&#x5B;i] = tomb&#x5B;j];\r\n          tomb&#x5B;j] = csere;\r\n        }\r\n      }\r\n    }\r\n    return tomb;\r\n  }\r\n\r\n  public static void main(String&#x5B;] args)\r\n  {\r\n    int&#x5B;] tomb = new int&#x5B;20];\r\n    for( int i = 0; i &lt; tomb.length; i++ )\r\n    {\r\n      tomb&#x5B;i] = (int)(Math.random()*41)-20;\r\n    }\r\n    \r\n    System.out.println(&quot;Eredeti tomb: &quot;);\r\n    kiir(tomb);\r\n    System.out.println(&quot;Rendezett tomb: &quot;);\r\n    tomb = rendezNovekvo(tomb);\r\n    kiir(tomb);\r\n  }\r\n}\r\n<\/pre>\n<p>El\u00f6l ott tal\u00e1lhat\u00f3 kiemelve a ki\u00edr\u00e1st \u00e9s rendez\u00e9st megval\u00f3s\u00edt\u00f3 met\u00f3dus. L\u00e1ssuk mi van a main-ben:<\/p>\n<ul>\n<li>Ott a t\u00f6mb\u00f6m, 20 elem\u0171, eg\u00e9szeket tartalmaz majd.<\/li>\n<li>Felt\u00f6lt\u00f6ttem.<\/li>\n<li>Ki\u00edrtam az eredeti \u00e9rt\u00e9keit.<\/li>\n<li>Odaadtam a rendez\u0151 met\u00f3dusnak, aki rendezte, \u00e9s az eredetit kicser\u00e9ltem a rendezett t\u00f6mbre.<\/li>\n<li>Ki\u00edrtam a rendezett t\u00f6mb\u00f6t.<\/li>\n<\/ul>\n<p>Nincs is ezzel semmi gond, pontosan ezt v\u00e1rtuk. Pr\u00f3b\u00e1ld ki \u00fagy, hogy a kiemelt 43. sort cser\u00e9ld ki erre:<\/p>\n<pre class=\"brush: java; first-line: 40; gutter: true; highlight: [43]; title: ; notranslate\" title=\"\">\r\nSystem.out.println(&quot;Eredeti tomb: &quot;);\r\nkiir(tomb);\r\nSystem.out.println(&quot;Rendezett tomb: &quot;);\r\nrendezNovekvo(tomb);\r\nkiir(tomb);\r\n<\/pre>\n<p>Futtasd le \u00fajra! Kopp. Mi van?<\/p>\n<ol>\n<li>Odaadtam a t\u00f6mb\u00f6t, hogy rendezze.<\/li>\n<li>A met\u00f3dus rendezi a kapott t\u00f6mb\u00f6t, \u00e9s visszaadja a rendezettet.<\/li>\n<li>A rendezett t\u00f6mb\u00f6t, amit visszakaptam, <strong>nem t\u00e1roltam el<\/strong>, csak l\u00f3g a leveg\u0151ben, nem haszn\u00e1lja senki. Ilyenkor a Java szem\u00e9tgy\u0171jt\u0151 algoritmusa egy id\u0151 ut\u00e1n ki is takar\u00edtja a mem\u00f3ri\u00e1b\u00f3l.<\/li>\n<li>A ki\u00edrat\u00e1s alapj\u00e1n m\u00e9gis megv\u00e1ltozott az eredeti t\u00f6mb \u00fagy, hogy <strong>annak \u00faj \u00e9rt\u00e9ket nem adtam<\/strong>.<\/li>\n<\/ol>\n<p>\u00d6sszefoglalva: Adott egy rendez\u00e9st v\u00e9gz\u0151 met\u00f3dus, ami egy rendezett t\u00f6mb\u00f6t ad eredm\u00e9ny\u00fcl. A met\u00f3dust megh\u00edvom, odaadok neki egy t\u00f6mb\u00f6t, hogy rendezze, de az eredm\u00e9nyt figyelmen k\u00edv\u00fcl hagyom. Az eredeti t\u00f6mb m\u00e9gis rendezett lett!<\/p>\n<p>\u00c9s akkor mi van? \u00dagyis az volt a c\u00e9l, hogy rendezd a t\u00f6mb\u00f6t. Na de mi a helyzet akkor, ha szeretn\u00e9d megtartani az eredeti t\u00f6mb\u00f6t is, \u00e9s a rendezettet egy m\u00e1sik t\u00f6mbbe szeretn\u00e9d tenni? Akkor alapb\u00f3l \u00edgy pr\u00f3b\u00e1lkozn\u00e1l:<\/p>\n<pre class=\"brush: java; first-line: 40; gutter: true; highlight: [43]; title: ; notranslate\" title=\"\">\r\nSystem.out.println(&quot;Eredeti tomb: &quot;);\r\nkiir(tomb);\r\nSystem.out.println(&quot;Rendezett tomb: &quot;);\r\nint&#x5B;] tombRendezett = rendezNovekvo(tomb);\r\nkiir(tomb);\r\n<\/pre>\n<p>A met\u00f3dus \u00e1ltal rendezett t\u00f6mb\u00f6t egy m\u00e1sik t\u00f6mbbe akarom tenni, hogy megmaradjon az eredeti is, \u00e9s legyen egy rendezett t\u00f6mb\u00f6m is. Pr\u00f3b\u00e1ld ki. A k\u00e9t t\u00f6mb egyforma lesz! Ha egy met\u00f3dusnak odaadok egy referencia t\u00edpus\u00fa v\u00e1ltoz\u00f3t (t\u00f6mb, lista, objektum), akkor amennyiben a met\u00f3dus a kapott adatban b\u00e1rmit megv\u00e1ltoztat, akkor az az eredeti, h\u00edv\u00f3 helyen l\u00e9v\u0151 adat is megv\u00e1ltozik! Akkor is, ha az eredm\u00e9nyt egy m\u00e1sik v\u00e1ltoz\u00f3ba tenn\u00e9d!<\/p>\n<p>Ez a probl\u00e9ma nem csak met\u00f3dus haszn\u00e1latakor jelentkezik. Pr\u00f3b\u00e1ld csak ki ezt:<\/p>\n<pre class=\"brush: java; gutter: true; highlight: [2]; title: ; notranslate\" title=\"\">\r\nint&#x5B;] t1 = new int&#x5B;] { 1,2 };\r\nint&#x5B;] t2 = t1;\r\nSystem.out.println(&quot;t1: &quot;+t1&#x5B;0]+&quot; &quot;+t1&#x5B;1]);\r\nSystem.out.println(&quot;t2: &quot;+t2&#x5B;0]+&quot; &quot;+t2&#x5B;1]);\r\n\r\nt1&#x5B;0] = 100;\r\n    \r\nSystem.out.println(&quot;t1: &quot;+t1&#x5B;0]+&quot; &quot;+t1&#x5B;1]);\r\nSystem.out.println(&quot;t2: &quot;+t2&#x5B;0]+&quot; &quot;+t2&#x5B;1]);\r\n<\/pre>\n<p>A gond a kiemelt sorban van. Ha egy t\u00f6mb\u00f6t egyenl\u0151v\u00e9 teszek egy m\u00e1sikkal, akkor a k\u00e9t t\u00f6mbv\u00e1ltoz\u00f3ban ugyanaz a mem\u00f3riac\u00edm lesz, vagyis mindkett\u0151 ugyanarra az egyetlen l\u00e9tez\u0151 adatszerkezetre (a t\u00f6mb elemeire) mutat, vagyis b\u00e1rmelyiken v\u00e1ltoztatok, mindkett\u0151 megv\u00e1ltozik.<\/p>\n<p>El lehet ker\u00fclni egyszer\u0171en ezt a probl\u00e9m\u00e1t? Szerencs\u00e9re igen, mivel a Java k\u00e9sz\u00edt\u0151i gondoltak r\u00e1nk. A t\u00f6mbnek (\u00e9s list\u00e1nak is) l\u00e9tezik egy be\u00e9p\u00edtett met\u00f3dusa, a clone(). Ez pontosan azt teszi, amire a neve utal, k\u00e9sz\u00edt egy pontos m\u00e1solatot az eredetir\u0151l. Mindezt \u00fagy teszi, hogy val\u00f3ban l\u00e9trej\u00f6n a mem\u00f3ri\u00e1ban egy, az eredetivel m\u00e9ret \u00e9s \u00e9rt\u00e9kek szerint megegyez\u0151 m\u00e1solat, de \u00faj mem\u00f3riac\u00edmmel. Innent\u0151l a kett\u0151 egym\u00e1st\u00f3l f\u00fcggetlen, b\u00e1rmelyikkel tehetek b\u00e1rmit, amit akarok, an\u00e9lk\u00fcl, hogy a m\u00e1sikat elrontan\u00e1m.<\/p>\n<p>Hogy val\u00f3s\u00edthatom ezt meg? M\u00e9g mindig a t\u00f6mb rendez\u00e9ses p\u00e9ld\u00e1n\u00e1l maradva, ha az eredm\u00e9nyt az eredetit\u0151l f\u00fcggetlen\u00fcl k\u00fcl\u00f6n szeretn\u00e9m t\u00e1rolni, akkor formailag ennyit kell tennem:<\/p>\n<pre class=\"brush: java; first-line: 40; gutter: true; highlight: [43]; title: ; notranslate\" title=\"\">\r\nSystem.out.println(&quot;Eredeti tomb: &quot;);\r\nkiir(tomb);\r\nSystem.out.println(&quot;Rendezett tomb: &quot;);\r\nint&#x5B;] tombRendezett = rendezNovekvo(tomb.clone());\r\nkiir(tomb);\r\n<\/pre>\n<p>Az eredeti t\u00f6mb m\u00e1solat\u00e1t adom oda a rendez\u0151 met\u00f3dusnak, \u00e9s az eredm\u00e9nyt elt\u00e1rolom a rendezett t\u00f6mb\u00f6t tartalmaz\u00f3 v\u00e1ltoz\u00f3mba. Term\u00e9szetesen ezt a k\u00e9t t\u00f6mb\u00f6s p\u00e9ld\u00e1ban is haszn\u00e1lhatom:<\/p>\n<pre class=\"brush: java; gutter: true; highlight: [2]; title: ; notranslate\" title=\"\">\r\nint&#x5B;] t1 = new int&#x5B;] { 1,2 };\r\nint&#x5B;] t2 = t1.clone();\r\nSystem.out.println(&quot;t1: &quot;+t1&#x5B;0]+&quot; &quot;+t1&#x5B;1]);\r\nSystem.out.println(&quot;t2: &quot;+t2&#x5B;0]+&quot; &quot;+t2&#x5B;1]);\r\n\r\nt1&#x5B;0] = 100;\r\n\r\nSystem.out.println(&quot;t1: &quot;+t1&#x5B;0]+&quot; &quot;+t1&#x5B;1]);\r\nSystem.out.println(&quot;t2: &quot;+t2&#x5B;0]+&quot; &quot;+t2&#x5B;1]);\r\n<\/pre>\n<p><strong>A clone() nem univerz\u00e1lis megold\u00e1s, csak egyetlen oldalr\u00f3l kezeli a probl\u00e9m\u00e1t!<\/strong><\/p>\n<p>Eg\u00e9szen addig nincs gond, am\u00edg a t\u00f6mb vagy lista, amit a met\u00f3dusnak odaadunk csak primit\u00edv elemeket tartalmaz. Ok\u00e9, list\u00e1nak primit\u00edv elemeket nem adhatunk, ha mindenk\u00e9ppen eg\u00e9sz sz\u00e1mokat szeretn\u00e9nk t\u00e1rolni benne, akkor egy csomagol\u00f3 oszt\u00e1lyra (Integer) van sz\u00fcks\u00e9g\u00fcnk. B\u00e1r itt m\u00e9g bizonyos autoboxing is szerepet kap.<\/p>\n<p>De mi van akkor, ha a t\u00f6mb vagy lista nem primit\u00edv \u00e9rt\u00e9keket tartalmaz, hanem objektumokat? K\u00e9s\u0151bb javar\u00e9szt \u00fagyis ezekkel dolgozunk majd. A helyzet az, hogy a clone() csak egy bizonyos m\u00e9lys\u00e9gig dolgozik. Gyakorlatban ez azt jelenti, hogy l\u00e9trehoz egy \u00faj t\u00f6mb\u00f6t vagy list\u00e1t, ami f\u00fcggetlen az eredetit\u0151l, de pontosan ugyanazok az objektumok lesznek benne (mivel az objektumok is csak mutat\u00f3k\u00e9nt l\u00e9teznek a v\u00e1ltoz\u00f3kban, hiszen referencia t\u00edpusok). A k\u00e9t t\u00f6mbben vagy list\u00e1ban az elemek sorrendj\u00e9n v\u00e1ltoztathatok, ezek f\u00fcggetlenek lesznek. De amint valamelyik objektumon v\u00e1ltoztatok, akkor az mindkett\u0151ben v\u00e1ltozik!<\/p>\n<p>Egy egyszer\u0171 p\u00e9lda erre a probl\u00e9m\u00e1ra t\u00f6mb eset\u00e9n. Adott egy egyszer\u0171 Kutya objektum. A kuty\u00e1nak csak neve van. L\u00e9trehozok egy 3 kuty\u00e1b\u00f3l \u00e1ll\u00f3 t\u00f6mb\u00f6t, majd k\u00e9sz\u00edtek r\u00f3la egy m\u00e1solatot. Megcser\u00e9lek k\u00e9t kuty\u00e1t, majd valamelyiknek megv\u00e1ltoztatom a nev\u00e9t.<\/p>\n<pre class=\"brush: java; gutter: true; highlight: [32]; title: ; notranslate\" title=\"\">\r\npackage kutyatombreferencia;\r\n\r\nclass Kutya\r\n{\r\n  String nev;\r\n  \r\n  public Kutya( String nev )\r\n  {\r\n    this.nev = nev;\r\n  }\r\n}\r\n\r\npublic class KutyaTombReferencia\r\n{\r\n  public static void kiir( Kutya&#x5B;] tomb )\r\n  {\r\n    for( int i = 0; i &lt; tomb.length; i++ )\r\n    {\r\n      System.out.print(tomb&#x5B;i].nev+&quot; &quot;);\r\n    }\r\n    System.out.println();\r\n  }\r\n\r\n  public static void main(String&#x5B;] args)\r\n  {\r\n    Kutya&#x5B;] kutyak = new Kutya&#x5B;3];\r\n    \r\n    kutyak&#x5B;0] = new Kutya(&quot;Zulu&quot;);\r\n    kutyak&#x5B;1] = new Kutya(&quot;Sziszi&quot;);\r\n    kutyak&#x5B;2] = new Kutya(&quot;Nokedli&quot;);\r\n    \r\n    Kutya&#x5B;] masolat = kutyak.clone();\r\n    System.out.print(&quot;Eredeti tomb: &quot;);\r\n    kiir(kutyak);\r\n    System.out.print(&quot;Masolat tomb: &quot;);\r\n    kiir(masolat);\r\n    System.out.println();\r\n    \r\n    System.out.println(&quot;Kutya csere az eredeti tombben:&quot;);\r\n    Kutya csere;\r\n    csere = kutyak&#x5B;0];\r\n    kutyak&#x5B;0] = kutyak&#x5B;2];\r\n    kutyak&#x5B;2] = csere;\r\n    \r\n    System.out.print(&quot;Eredeti tomb: &quot;);\r\n    kiir(kutyak);\r\n    System.out.print(&quot;Masolat tomb: &quot;);\r\n    kiir(masolat);\r\n    \r\n    System.out.println();\r\n\r\n    System.out.println(&quot;Nev csere a masolat tombben:&quot;);\r\n    masolat&#x5B;1].nev = &quot;Tunemeny&quot;;\r\n    \r\n    System.out.print(&quot;Eredeti tomb: &quot;);\r\n    kiir(kutyak);\r\n    System.out.print(&quot;Masolat tomb: &quot;);\r\n    kiir(masolat);\r\n  }\r\n}\r\n<\/pre>\n<p>Ha kipr\u00f3b\u00e1lod a fenti k\u00f3dot, akkor a k\u00f6vetkez\u0151k sz\u0171rhet\u0151k le. A k\u00e9t t\u00f6mb a clone() met\u00f3dus miatt val\u00f3ban f\u00fcggetlen lesz egym\u00e1st\u00f3l, ha valamelyikben v\u00e1ltoztatok az elemek sorrendj\u00e9n, akkor val\u00f3ban csak abban a t\u00f6mbben v\u00e1ltozik meg. Ha azonban b\u00e1rmelyik t\u00f6mbben valamelyik elemet v\u00e1ltoztatom meg, akkor az mindk\u00e9t t\u00f6mbben megv\u00e1ltozik.<\/p>\n<p>A clone() teh\u00e1t csak a legfels\u0151 szinten, a t\u00f6mb\u00f6kn\u00e9l v\u00e9gez olyan m\u00e1sol\u00e1st, ami egy \u00faj referenci\u00e1val rendelkez\u0151, eredetit\u0151l k\u00fcl\u00f6nb\u00f6z\u0151 t\u00f6mb\u00f6t hoz l\u00e9tre, <strong>de ugyanazokat az elemeket helyezi el benne!<\/strong> Ezt figyelembe kell venni akkor is, ha ezek a t\u00f6mb\u00f6k egy met\u00f3dus h\u00edv\u00e1skor haszn\u00e1latosak. A met\u00f3dus sorrendet v\u00e1ltoztathat, de ha elemet v\u00e1ltoztat, akkor a met\u00f3dus hat\u00e1sa visszahat az eredeti, h\u00edv\u00e1skor \u00e1tadott v\u00e1ltoz\u00f3 tartalm\u00e1ra is!<\/p>\n<p><strong>\u00d6sszess\u00e9g\u00e9ben r\u00f6gz\u00edts\u00fck a k\u00f6vetkez\u0151ket:<\/strong><\/p>\n<p>Minden primit\u00edv v\u00e1ltoz\u00f3 (eg\u00e9sz, val\u00f3s, char \u00e9s boolean) minden esetben \u00e9rt\u00e9k szerint ker\u00fcl \u00e1tad\u00e1sra met\u00f3dus h\u00edv\u00e1skor. Minden egy\u00e9b adatszerkezet (t\u00f6mb, lista, objektumok, stb) pedig referenciak\u00e9nt, vagyis a v\u00e1ltoz\u00f3ban t\u00e1rolt c\u00edmk\u00e9nt ker\u00fcl \u00e1tad\u00e1sra. Ezekn\u00e9l az adatszerkezetekn\u00e9l, ha a met\u00f3dus m\u00f3dos\u00edtja a kapott referencia t\u00edpus\u00fa adatszerkezetet, akkor annak tartalma a met\u00f3dust megh\u00edv\u00f3 helyen is megv\u00e1ltozik!<\/p>\n<h4>Komplex p\u00e9lda<\/h4>\n<p>L\u00e1ssunk akkor egy komplexebb feladatot, ahol bizonyos feladatr\u00e9szeket met\u00f3dusba fogok kiemelni. Nem felt\u00e9tlen\u00fcl azzal a c\u00e9llal teszem, hogy az ism\u00e9tl\u0151d\u0151 tev\u00e9kenys\u00e9geket ne kelljen t\u00f6bbsz\u00f6r meg\u00edrnom. N\u00e9ha csak az\u00e9rt emelem ki, hogy l\u00e1sd, hogyan is kell met\u00f3dust k\u00e9sz\u00edteni.<\/p>\n<pre class=\"brush: java; gutter: true; highlight: [43,44,45,46,47,48,49,50,182,208,243,266,273,291]; title: ; notranslate\" title=\"\">\r\npackage metodusok;\r\n\r\npublic class Metodusok {\r\n  \r\n  public static int&#x5B;] feltolt20_20( int&#x5B;] tomb )\r\n  {\r\n    for( int i = 0; i &lt; tomb.length; i++ )\r\n    {\r\n      tomb&#x5B;i] = (int)(Math.random()*41)-20;\r\n    }\r\n    return tomb;\r\n  }\r\n  \r\n  public static void kiir( int&#x5B;] tomb )\r\n  {\r\n    for( int i = 0; i &lt; tomb.length; i++ )\r\n    {\r\n      System.out.print(tomb&#x5B;i]+&quot; &quot;);\r\n    }\r\n    System.out.println();\r\n  }\r\n  \r\n  public static void kiirParos12( int&#x5B;] tomb )\r\n  {\r\n    for( int i = 0; i &lt; tomb.length; i++ )\r\n    {\r\n      if( tomb&#x5B;i] % 2 == 0 &amp;&amp; tomb&#x5B;i] &lt; 12 )\r\n      {\r\n        System.out.print(tomb&#x5B;i]+&quot; &quot;);\r\n      }\r\n    }\r\n    System.out.println();\r\n  }\r\n  \r\n  public static boolean vanE_17( int&#x5B;] tomb )\r\n  {\r\n    int hely = 0;\r\n    while( hely &lt; tomb.length &amp;&amp; tomb&#x5B;hely] &gt;= -17 )\r\n    {\r\n      hely++;\r\n    }\r\n    \r\n    if( hely &lt; tomb.length )\r\n    {\r\n      return true;\r\n    }\r\n    else\r\n    {\r\n      return false;\r\n    }\r\n  }\r\n  \r\n  public static int osszegTomb( int&#x5B;] tomb )\r\n  {\r\n    int osszeg = 0;\r\n    for( int i = 0; i &lt; tomb.length; i++ )\r\n    {\r\n      osszeg += tomb&#x5B;i];\r\n    }\r\n    return osszeg;\r\n  }\r\n  \r\n  public static int&#x5B;] feltolt15_15( int&#x5B;] tomb )\r\n  {\r\n    for( int i = 0; i &lt; tomb.length; i++ )\r\n    {\r\n      tomb&#x5B;i] = (int)(Math.random()*31)-15;\r\n    }\r\n    return tomb;\r\n  }\r\n  \r\n  public static int maxTomb( int&#x5B;] tomb )\r\n  {\r\n    int max = 0;\r\n    for( int i = 1; i &lt; tomb.length; i++ )\r\n    {\r\n      if( tomb&#x5B;i] &gt; tomb&#x5B;max] )\r\n      {\r\n        max = i;\r\n      }\r\n    }\r\n    return tomb&#x5B;max];\r\n  }\r\n\r\n  public static int legkozelebb0( int&#x5B;] tomb )\r\n  {\r\n    int min = 0;\r\n    for( int i = 1; i &lt; tomb.length; i++ )\r\n    {\r\n      if( Math.abs(tomb&#x5B;i]) &lt; Math.abs(tomb&#x5B;min]) )\r\n      {\r\n        min = i;\r\n      }\r\n    }\r\n    return tomb&#x5B;min];\r\n  }\r\n\r\n  public static int minTomb( int&#x5B;] tomb )\r\n  {\r\n    int min = 0;\r\n    for( int i = 1; i &lt; tomb.length; i++ )\r\n    {\r\n      if( tomb&#x5B;i] &lt; tomb&#x5B;min] )\r\n      {\r\n        min = i;\r\n      }\r\n    }\r\n    return tomb&#x5B;min];\r\n  }\r\n  \r\n  public static int&#x5B;] kivalogatParos( int&#x5B;] tomb )\r\n  {\r\n    int db = 0;\r\n    for( int i = 0; i &lt; tomb.length; i++ )\r\n    {\r\n      if( tomb&#x5B;i] % 2 == 0 )\r\n      {\r\n        db++;\r\n      }\r\n    }\r\n    \r\n    if( db == 0 )\r\n    {\r\n      return new int&#x5B;0];\r\n    }\r\n    \r\n    else\r\n    {\r\n      int&#x5B;] tomb2 = new int&#x5B;db];\r\n\r\n      db = 0;\r\n      for (int i = 0; i &lt; tomb.length; i++)\r\n      {\r\n        if (tomb&#x5B;i] % 2 == 0)\r\n        {\r\n          tomb2&#x5B;db] = tomb&#x5B;i];\r\n          db++;\r\n        }\r\n      }\r\n      return tomb2;\r\n    }\r\n  }\r\n  \r\n  public static int&#x5B;] rendezNovekvo( int&#x5B;] tomb )\r\n  {\r\n    int csere;\r\n    for( int i = 0; i &lt; tomb.length-1; i++ )\r\n    {\r\n      for( int j = i+1; j &lt; tomb.length; j++ )\r\n      {\r\n        if( tomb&#x5B;i] &gt; tomb&#x5B;j] )\r\n        {\r\n          csere = tomb&#x5B;i];\r\n          tomb&#x5B;i] = tomb&#x5B;j];\r\n          tomb&#x5B;j] = csere;\r\n        }\r\n      }\r\n    }\r\n    return tomb;\r\n  }\r\n  \r\n  public static int&#x5B;] rendezCsokkeno( int&#x5B;] tomb )\r\n  {\r\n    int csere;\r\n    for( int i = 0; i &lt; tomb.length-1; i++ )\r\n    {\r\n      for( int j = i+1; j &lt; tomb.length; j++ )\r\n      {\r\n        if( tomb&#x5B;i] &lt; tomb&#x5B;j] )\r\n        {\r\n          csere = tomb&#x5B;i];\r\n          tomb&#x5B;i] = tomb&#x5B;j];\r\n          tomb&#x5B;j] = csere;\r\n        }\r\n      }\r\n    }\r\n    return tomb;\r\n  }\r\n\r\n  public static double atlag( int&#x5B;] tomb )\r\n  {\r\n    return (double)osszegTomb(tomb) \/ tomb.length;\r\n  }\r\n\r\n  public static void main(String&#x5B;] args)\r\n  {\r\n    \/\/ 1. feladat\r\n    \/\/ T\u00f6lts fel egy 10 elem\u0171 t\u00f6mb\u00f6t a &#x5B;-20;20] intervallumb\u00f3l,\r\n    \/\/ \u00e9s \u00edrd ki egym\u00e1s mell\u00e9 az elemeket,\r\n    \/\/ sz\u00f3k\u00f6zzel elv\u00e1lasztva.\r\n    System.out.println(&quot;\\n1. feladat&quot;);\r\n    int&#x5B;] tomb = new int&#x5B;10];\r\n    tomb = feltolt20_20(tomb);\r\n    kiir(tomb);\r\n    \r\n    \/\/ 2. feladat\r\n    \/\/ \u00cdrd ki azokat a p\u00e1ros elemeket,\r\n    \/\/ amelyek nem \u00e9rik el a 12-\u0151t.\r\n    System.out.println(&quot;\\n2. feladat&quot;);\r\n    System.out.print(&quot;A tomb azon paros elemei, amelyek nem &quot;+\r\n             &quot;erik el a 12-ot: &quot;);\r\n    kiirParos12(tomb);\r\n    \r\n    \/\/ 3. feladat\r\n    \/\/ Van-e a t\u00f6mbben -17-n\u00e9l kisebb elem?\r\n    System.out.println(&quot;\\n3. feladat&quot;);\r\n    \r\n    if( vanE_17(tomb) )\r\n    {\r\n      System.out.println(&quot;Van -17-nel kisebb eleme.&quot;);\r\n    }\r\n    else\r\n    {\r\n      System.out.println(&quot;Nincs -17-nel kisebb eleme.&quot;);\r\n    }\r\n    \r\n    \/\/ 4. feladat\r\n    \/\/ \u00cdrd ki a t\u00f6mb elemeinek \u00f6sszeg\u00e9t.\r\n    System.out.println(&quot;\\n4. feladat&quot;);\r\n    \r\n    System.out.println(&quot;A tomb elemeinek osszege: &quot;+\r\n               osszegTomb(tomb));\r\n\r\n    \/\/ 5. feladat\r\n    \/\/ T\u00f6ltsd fel \u00fajra a t\u00f6mb\u00f6t a &#x5B;-15;15] intervallumb\u00f3l, \r\n    \/\/ \u00e9s \u00edrd ki egym\u00e1s mell\u00e9 az elemeket,\r\n    \/\/ sz\u00f3k\u00f6zzel elv\u00e1lasztva.\r\n    System.out.println(&quot;\\n5. feladat&quot;);\r\n    System.out.print(&quot;A tomb elemei a &#x5B;-15;15] &quot;+\r\n             &quot;intervallumbol sorsolva: &quot;);\r\n    tomb = feltolt15_15(tomb);\r\n    kiir(tomb);\r\n    \r\n    \/\/ 6. feladat\r\n    \/\/ Melyik a t\u00f6mb legnagyobb eleme?\r\n    System.out.println(&quot;\\n6. feladat&quot;);\r\n    System.out.print(&quot;A tomb legnagyobb eleme: &quot;);\r\n    System.out.println( maxTomb(tomb) );\r\n    \r\n    \/\/ 7. feladat\r\n    \/\/ Melyik elem van a legk\u00f6zelebb a null\u00e1hoz?\r\n    System.out.println(&quot;\\n7. feladat&quot;);\r\n    System.out.println(&quot;A &quot;+legkozelebb0(tomb)+&quot; elem van &quot;+\r\n               &quot;legkozelebb a nullahoz.&quot;);\r\n    \r\n    \/\/ 8. feladat\r\n    \/\/ H\u00e1ny maximuma van a t\u00f6mbnek?\r\n    System.out.println(&quot;\\n8. feladat&quot;);\r\n    int maxErtek = maxTomb(tomb);\r\n    int db = 0;\r\n    for( int i = 0; i &lt; tomb.length; i++ )\r\n    {\r\n      if( tomb&#x5B;i] == maxErtek )\r\n      {\r\n        db++;\r\n      }\r\n    }\r\n    System.out.println(db+&quot; maximuma van a tombnek.&quot;);\r\n\r\n    \/\/ 9. feladat\r\n    \/\/ \u00cdrd ki, melyik az a legkisebb intervallum, amelybe a\r\n    \/\/ t\u00f6mbben l\u00e9v\u0151 elemek belef\u00e9rnek! \r\n    System.out.println(&quot;\\n9. feladat&quot;);\r\n    System.out.println(&quot;A legkisebb intervallum, amelyben a &quot;+\r\n               &quot;tomb elemei benne vannak: &quot;);\r\n    System.out.println(&quot;&#x5B;&quot;+minTomb(tomb)+&quot;;&quot;+maxTomb(tomb)+&quot;]&quot;);\r\n    \r\n    \/\/ 10. feladat\r\n    \/\/ Rendezd a t\u00f6mb elemeit n\u00f6vekv\u0151 sorrendbe,\r\n    \/\/ \u00e9s \u00edrd ki egym\u00e1s mell\u00e9 az elemeket,\r\n    \/\/ sz\u00f3k\u00f6zzel elv\u00e1lasztva!\r\n    System.out.println(&quot;\\n10. feladat&quot;);\r\n    int&#x5B;] rendezettTomb = rendezNovekvo(tomb.clone());\r\n    System.out.println(&quot;A tomb elemei novekvo sorrendben: &quot;);\r\n    kiir(rendezettTomb);\r\n    \r\n    \/\/ 11. feladat\r\n    \/\/ V\u00e1logasd ki a t\u00f6mb p\u00e1ros elemeit a t\u00f6mbb\u0151l\r\n    \/\/ egy m\u00e1sik t\u00f6mbbe!\r\n    System.out.println(&quot;\\n11. feladat&quot;);\r\n    int&#x5B;] parosTomb = kivalogatParos(tomb);\r\n    System.out.print(&quot;A kivalogatott paros szamok: &quot;);\r\n    kiir( kivalogatParos(tomb) );\r\n\r\n    \/\/ 12. feladat\r\n    \/\/ A kiv\u00e1logatott t\u00f6mbben melyik a m\u00e1sodik legnagyobb elem?\r\n    \/\/ (az egyforma sz\u00e1mokat is k\u00fcl\u00f6nb\u00f6z\u0151nek vessz\u00fck)\r\n    System.out.println(&quot;\\n12. feladat&quot;);\r\n    System.out.println(&quot;A kivalogatott tomb masodik &quot;+\r\n               &quot;legnagyobb eleme: &quot;);\r\n    int&#x5B;] csokkenoParosTomb = rendezCsokkeno(parosTomb.clone());\r\n    \r\n    if( csokkenoParosTomb.length &lt; 2 )\r\n    {\r\n      System.out.println(&quot;Nincs ket elem a kivalogatott &quot;+\r\n                 &quot;tombben.&quot;);\r\n    }\r\n    else\r\n    {\r\n      System.out.println(&quot;A kivalogatott tomb 2. &quot;+\r\n                 &quot;legnagyobb eleme: &quot;+csokkenoParosTomb&#x5B;1]);\r\n    }\r\n    \r\n    \/\/ 13. feladat\r\n    \/\/ A kiv\u00e1logatott t\u00f6mbben melyik a m\u00e1sodik legnagyobb sz\u00e1m?\r\n    \/\/ (az egyforma sz\u00e1mokat is azonosnak vessz\u00fck)\r\n    System.out.println(&quot;\\n13. feladat&quot;);\r\n    System.out.println(&quot;A kivalogatott tomb masodik &quot;+\r\n               &quot;legnagyobb szama: &quot;);\r\n    if( csokkenoParosTomb.length &lt; 2 )\r\n    {\r\n      System.out.println(&quot;Nincs ket elem a kivalogatott &quot;+\r\n                 &quot;tombben.&quot;);\r\n    }\r\n    \r\n    boolean masodikMax = false;\r\n    for( int i = 1; i &lt; csokkenoParosTomb.length; i++ )\r\n    {\r\n      if( csokkenoParosTomb&#x5B;i] != csokkenoParosTomb&#x5B;0] )\r\n      {\r\n        System.out.println(&quot;A kivalogatott tomb 2. &quot;+\r\n                   &quot;legnagyobb szama: &quot;+csokkenoParosTomb&#x5B;i]);\r\n        masodikMax = true;\r\n        break;\r\n      }\r\n    }\r\n    \r\n    if( !masodikMax )\r\n    {\r\n      System.out.println(&quot;Nincs masodik maximum a &quot;+\r\n                 &quot;kivalogatott tombben.&quot;);\r\n    }\r\n    \r\n    \/\/ 14. feladat\r\n    \/\/ \u00cdrd ki a t\u00f6mb elemeinek \u00e1tlag\u00e1t\r\n    System.out.println(&quot;\\n14. feladat&quot;);\r\n    System.out.println(&quot;A tomb elemeinek atlaga: &quot;+\r\n               atlag(tomb) );\r\n  }\r\n}\r\n<\/pre>\n<p>L\u00e1ssunk akkor n\u00e9h\u00e1ny kiemelt dolgot:<\/p>\n<ul>\n<li>43-50 &#8211; Ezt a r\u00e9szt ak\u00e1r ezzel is helyettes\u00edthettem volna:\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">return hely &lt; tomb.length;<\/pre>\n<\/li>\n<li>182 &#8211; Ha megn\u00e9zed, az \u00e1tlag sz\u00e1m\u00edt\u00f3 met\u00f3dus r\u00e9szfeladatk\u00e9nt felhaszn\u00e1lja az \u00f6sszeg sz\u00e1m\u00edt\u00f3 met\u00f3dust, akinek odaadja azt a t\u00f6mb\u00f6t, amit \u0151 \u00e1tlagolni szeretne. Az \u00f6sszeg sz\u00e1m\u00edt\u00f3 megadja a t\u00f6mb elemeinek \u00f6sszeg\u00e9t, amit csak osztani kell a t\u00f6mb m\u00e9ret\u00e9vel. A k\u00e9t met\u00f3dus tetsz\u0151leges sorrendben szerepelhet egym\u00e1shoz k\u00e9pest, nincs olyan probl\u00e9ma, mint C++ eset\u00e9n, hogy egy met\u00f3dus nem l\u00e1tja a m\u00f6g\u00f6tte l\u00e9v\u0151t, hacsak nem \u00edrom ki a k\u00f3d elej\u00e9re a h\u00e1ts\u00f3 met\u00f3dus szignat\u00far\u00e1j\u00e1t. L\u00e1sd: <a href=\"http:\/\/www.webotlet.hu\/?p=1997\">C++ saj\u00e1t f\u00fcggvg\u00e9nyek<\/a>.<\/li>\n<li>208 &#8211; Ebben a sorban nem azt vizsg\u00e1lom, hogy\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">if( vanE_17(tomb) == true )<\/pre>\n<p>helyette ez a vizsg\u00e1lat is el\u00e9g:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">if( vanE_17(tomb) )<\/pre>\n<p>A vanE_17 met\u00f3dus \u00f6nmag\u00e1ban logikai t\u00edpus\u00fa eredm\u00e9nyt ad, amit felesleges egy logikai \u00e9rt\u00e9khez hasonl\u00edtani egyenl\u0151s\u00e9g vizsg\u00e1lattal.<\/li>\n<li>243 &#8211; A met\u00f3dus eredm\u00e9ny\u00e9t ak\u00e1r bele is f\u0171zhetem a v\u00e1laszba.<\/li>\n<li>266 &#8211; Az el\u0151z\u0151h\u00f6z hasonl\u00f3an ak\u00e1r t\u00f6bb met\u00f3dus eredm\u00e9ny\u00e9t is beilleszthetem k\u00f6zvetlen\u00fcl a v\u00e1laszba.<\/li>\n<li>273, 291 &#8211; \u00daj rendezett t\u00f6mb\u00f6t akarok l\u00e9trehozni. Az eredeti t\u00f6mb m\u00e1solat\u00e1t adom oda, hogy a rendez\u00e9s ne hasson az eredeti t\u00f6mbre.<\/li>\n<\/ul>\n<p>Mivel a cikk \u00edr\u00e1sakor m\u00e1r a 88. v\u00e1ltozatn\u00e1l j\u00e1rok, egyel\u0151re munkap\u00e9ld\u00e1nyk\u00e9nt teszem k\u00f6zz\u00e9 ezt a leck\u00e9t. M\u00e9g esetleg a return t\u00e9mak\u00f6rt kicsit k\u00f6rbej\u00e1rom, de most elfogyott a t\u00fcrelmem. P\u00e1r h\u00e9ten bel\u00fcl \u00fagyis kider\u00fcl, milyen hib\u00e1kat tal\u00e1ltok benne. Ezeket majd jav\u00edtom, \u00e9s akkor nyilv\u00e1n\u00edtom v\u00e9glegesnek. Addig maradjon ez a p\u00e9ld\u00e1ny nyilv\u00e1nos. A leck\u00e9k sorrendj\u00e9t is \u00e1t szeretn\u00e9m majd dolgozni, teh\u00e1t a sorsz\u00e1mok is v\u00e1ltozni fognak. Egyel\u0151re ez marad a 22-es, ami \u00fagyis hi\u00e1nyzik a sorsz\u00e1moz\u00e1sb\u00f3l \ud83d\ude42 Addig is haszn\u00e1lj\u00e1tok eg\u00e9szs\u00e9ggel!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Saj\u00e1t met\u00f3dusok, avagy ne ism\u00e9teld \u00f6nmagad Ezzel a leck\u00e9vel gyakorlatilag kib\u0151v\u00edtem az alap leck\u00e9kben szerepl\u0151 Met\u00f3dusok t\u00e9mak\u00f6rt. A programoz\u00e1si nyelv k\u00e9sz\u00edt\u0151i, mint m\u00e1r eml\u00edtettem, nagyon sok okos dolgot el\u0151re meg\u00edrtak, amelyeket haszn\u00e1lhatunk. Math oszt\u00e1ly, eml\u00e9kszel? A helyzet az, hogy \u0151k <a class=\"more-link\" href=\"https:\/\/www.webotlet.hu\/?p=2227\">Tov\u00e1bb <span class=\"screen-reader-text\">  Java programoz\u00e1s 22. &#8211; Saj\u00e1t met\u00f3dusok, avagy ne ism\u00e9teld \u00f6nmagad<\/span><span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[100],"tags":[202,62,199,168,86,144,16,61,200,195,20,204,143,203,197,164,201,198,15,63],"class_list":["post-2227","post","type-post","status-publish","format-standard","hentry","category-java-halado-leckek","tag-clone","tag-fuggveny","tag-fuggveny-hivas","tag-fuggvenyek","tag-java","tag-java_programozas","tag-lista","tag-metodus","tag-metodus-hivas","tag-metodusok","tag-objektum","tag-parameter","tag-programozas","tag-referencia","tag-return","tag-sajat-fuggveny","tag-sajat-metodus","tag-szignatura","tag-tomb","tag-visszateresi-ertek"],"_links":{"self":[{"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=\/wp\/v2\/posts\/2227","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2227"}],"version-history":[{"count":90,"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=\/wp\/v2\/posts\/2227\/revisions"}],"predecessor-version":[{"id":2342,"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=\/wp\/v2\/posts\/2227\/revisions\/2342"}],"wp:attachment":[{"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2227"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2227"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2227"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}