{"id":1312,"date":"2015-04-07T19:05:06","date_gmt":"2015-04-07T17:05:06","guid":{"rendered":"http:\/\/www.webotlet.hu\/?p=1312"},"modified":"2020-05-11T08:26:28","modified_gmt":"2020-05-11T06:26:28","slug":"java-kiegeszito-lecke-foreach-ciklus","status":"publish","type":"post","link":"https:\/\/www.webotlet.hu\/?p=1312","title":{"rendered":"Java kieg\u00e9sz\u00edt\u0151 lecke &#8211; Foreach ciklus"},"content":{"rendered":"<p>A ciklusok k\u00f6z\u00fcl nagyon sokra az\u00e9rt van sz\u00fcks\u00e9g, hogy t\u00f6mb\u00f6ket, list\u00e1kat j\u00e1rjunk be vel\u00fck. Mivel az elemeken rendszerint sorrendben \u00e9s egyes\u00e9vel kell v\u00e9gigl\u00e9pkedn\u00fcnk, nagyon sok ciklusunk feje teljesen ugyan\u00fagy n\u00e9z ki. \u00a0L\u00e9nyegi k\u00fcl\u00f6nbs\u00e9g csak a ciklusmagban van, att\u00f3l f\u00fcgg\u0151en, hogy \u00e9pp mit akarunk tenni az elemekkel.<\/p>\n<p>Milyen j\u00f3 is lenne, ha a ciklus fej\u00e9t ler\u00f6vid\u00edthetn\u00e9nk, pl\u00e1ne, ha mag is t\u00f6m\u00f6rebb, m\u00e9gis \u00e1tl\u00e1that\u00f3bb lenne. A programoz\u00f3k lust\u00e1k. \u00c9n legal\u00e1bbis. Igyekszem r\u00f6vid\u00edteni, egyszer\u0171s\u00edteni ott, ahol lehet. De mindig szem el\u0151tt tartom a legfontosabbat, ami a j\u00f3 programoz\u00e1s egyik alapelve: <strong>olvashat\u00f3s\u00e1g \u00e9s \u00e1tl\u00e1that\u00f3s\u00e1g<\/strong>. Az egyszer\u0171s\u00edt\u00e9s ezeket soha nem rombolhatja!<\/p>\n<p>A for ciklust ismerve \u00fagy t\u0171nik, hogy nem igaz\u00e1n lehet r\u00f6vid\u00edteni. Hiszen kell a ciklusv\u00e1ltoz\u00f3, amellyel egy adott index\u0171 elemre hivatkozunk. Biztos\u00edtanunk kell, hogy ne szaladjunk t\u00fal a ciklusv\u00e1ltoz\u00f3val a t\u00f6mb m\u00e9ret\u00e9n, valamint meg kell oldanunk, hogy az indexeken l\u00e9pkedhess\u00fcnk. Akkor m\u00e9gis mit lehet ezen r\u00f6vid\u00edteni?<\/p>\n<h2>foreach<\/h2>\n<p>A for ciklusnak l\u00e9tezik egy egyszer\u0171bb v\u00e1ltozata, amely pontosan ezt az egyszer\u0171s\u00edt\u00e9st oldja meg, r\u00e1ad\u00e1sul nagyon letisztult m\u00f3don. Hogy n\u00e9z ki a foreach?<\/p>\n<pre class=\"brush: java; gutter: true; highlight: [1,4]; title: ; notranslate\" title=\"\">\r\nfor( tipus valtozo : tomb )\r\n{\r\n  \/\/ amit az elemmel csinalni akarsz\r\n  System.out.print(valtozo);\r\n}\r\n<\/pre>\n<ul>\n<li>Az els\u0151 kiemelt sorban l\u00e1thatod a foreach ciklus fej\u00e9t. Csak k\u00e9t r\u00e9szb\u0151l \u00e1ll. El\u0151sz\u00f6r meg kell adni egy v\u00e1ltoz\u00f3t\u00edpust \u00e9s v\u00e1ltoz\u00f3nevet, majd kett\u0151sponttal elv\u00e1lasztva annak a t\u00f6mbnek vagy list\u00e1nak a nev\u00e9t, melyet be szeretn\u00e9l j\u00e1rni.<\/li>\n<li>A m\u00e1sodik kiemel\u00e9sben pedig a fejben megadott v\u00e1ltoz\u00f3t haszn\u00e1lom a feladatt\u00f3l f\u00fcgg\u0151en.<\/li>\n<\/ul>\n<h4>M\u0171k\u00f6d\u00e9se<\/h4>\n<p>A foreach ciklus bej\u00e1rja az adott t\u00f6mb\u00f6t vagy list\u00e1t, egyes\u00e9vel v\u00e9gigl\u00e9pked az elemein \u00fagy, hogy a megadott nev\u0171 v\u00e1ltoz\u00f3ba mindig azt az elemet helyezi el, ahol a bej\u00e1r\u00e1s sor\u00e1n \u00e9ppen tart. Fontos azonban, hogy mivel nincs index, fogalmunk sincs arr\u00f3l, hogy \u00e9ppen h\u00e1nyadik elemn\u00e9l tartunk. A t\u00f6mb elemeit nem indexel\u00e9ssel \u00e9ri el, hanem magukat az elemeket helyezi el a k\u00edv\u00e1nt v\u00e1ltoz\u00f3ban.<\/p>\n<p>A for ciklushoz k\u00e9pest k\u00fcl\u00f6nbs\u00e9g, hogy csak \u00e9s kiz\u00e1r\u00f3lag olyan v\u00e1ltoz\u00f3t haszn\u00e1lhatsz, amit ennek a ciklusnak a fej\u00e9ben deklar\u00e1lsz. Vagyis nem adhatsz meg olyan v\u00e1ltoz\u00f3t, melynek a t\u00edpus\u00e1t a ciklus el\u0151tt adtad meg valahol, esetleg m\u00e1r haszn\u00e1ltad is, majd itt csak a nev\u00e9re hivatkozol. Csak itt adhatod meg a t\u00edpus\u00e1t \u00e9s csak erre a ciklusra korl\u00e1tozod a hat\u00f3k\u00f6r\u00e9t. A k\u00f6vetkez\u0151 szerkezet teh\u00e1t nem haszn\u00e1lhat\u00f3:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nint szam = 0;\r\nfor( szam : szamtomb )\r\n{\r\n  System.out.println(szam);\r\n}\r\nSystem.out.println(&quot;A vizslak eletkoranak osszege: &quot;+osszeg);\r\n<\/pre>\n<p>Term\u00e9szetesen egym\u00e1st\u00f3l f\u00fcggetlen foreach ciklusokban haszn\u00e1lhatsz azonos nev\u0171 v\u00e1ltoz\u00f3kat, azok hat\u00f3k\u00f6rei nem fedik egym\u00e1st.<\/p>\n<h4>El\u0151ny\u00f6k:<\/h4>\n<ul>\n<li>R\u00f6videbb, de \u00e1tl\u00e1that\u00f3 k\u00f3d<\/li>\n<li>Nem kell a l\u00e9ptet\u00e9ssel foglalkozni<\/li>\n<li>Nem kell figyelni, mikor \u00e9r\u00fcnk a t\u00f6mb vagy lista v\u00e9g\u00e9re<\/li>\n<li>Kevesebb hibalehet\u0151s\u00e9g<\/li>\n<li>A break \u00e9s continue utas\u00edt\u00e1sok ugyan\u00fagy m\u0171k\u00f6dnek<\/li>\n<\/ul>\n<h4>H\u00e1tr\u00e1nyok:<\/h4>\n<ul>\n<li>Csak egyes\u00e9vel lehet l\u00e9pkedni az elemeken<\/li>\n<li>T\u00f6mb vagy lista felt\u00f6lt\u00e9s\u00e9re nem haszn\u00e1lhat\u00f3<\/li>\n<li>Primit\u00edv \u00e9rt\u00e9keket tartalmaz\u00f3 t\u00f6mb vagy lista elemeinek m\u00f3dos\u00edt\u00e1s\u00e1ra nem haszn\u00e1lhat\u00f3<\/li>\n<li>Nem tudjuk, \u00e9ppen hol j\u00e1runk a t\u00f6mbben vagy list\u00e1ban<\/li>\n<\/ul>\n<p>A h\u00e1tr\u00e1nyokb\u00f3l esetleg m\u00e1r l\u00e1that\u00f3, hogy bizonyos t\u00edpus\u00fa feladatok megold\u00e1s\u00e1ra nem haszn\u00e1lhat\u00f3 a foreach ciklus. Ezeket, ha tetszik, ha nem, a hagyom\u00e1nyos for ciklussal lehet csak megoldani.<\/p>\n<h4>Nem haszn\u00e1lhat\u00f3:<\/h4>\n<ul>\n<li>T\u00f6mb\u00f6k, list\u00e1k felt\u00f6lt\u00e9s\u00e9re<\/li>\n<li>Primit\u00edv elemek m\u00f3dos\u00edt\u00e1s\u00e1ra<\/li>\n<li>T\u00f6bb elem egy\u00fcttes vizsg\u00e1lat\u00e1ra (pl szomsz\u00e9dok)<\/li>\n<li>Minimum \u00e9s maximumkeres\u00e9sre (ha a hely\u00e9t keress\u00fck)<\/li>\n<li>Rendez\u00e9sre<\/li>\n<li>\u00c9s egy\u00e9b fel nem sorolt esetekben, amikor tudnunk kellene, \u00e9pp hol j\u00e1runk az adott t\u00f6mbben vagy list\u00e1ban.<\/li>\n<\/ul>\n<p>Azt, hogy mikor nem haszn\u00e1lhatjuk a foreach ciklust, \u00fagyis mindig a feladat d\u00f6nti el, de ezek az el\u0151z\u0151 p\u00e9ld\u00e1k j\u00f3 t\u00e1mpontot adhatnak, hogy ne is gondolkodj rajta. Egy\u00e9bk\u00e9nt ha sz\u00fcks\u00e9ged van az adott elem hely\u00e9re, akkor biztosan nem haszn\u00e1lhat\u00f3.<\/p>\n<h4>Komplex p\u00e9lda t\u00f6mb\u00f6kre:<\/h4>\n<p>Adott egy 10 elem\u0171 eg\u00e9szeket tartalmaz\u00f3 t\u00f6mb. Oldd meg a k\u00f6vetkez\u0151 feladatokat:<\/p>\n<ol>\n<li>T\u00f6ltsd fel egy 10 elem\u0171 t\u00f6mb\u00f6t v\u00e9letlen sz\u00e1mokkal a [-5;10] intervallumb\u00f3l.<\/li>\n<li>\u00cdrd ki a t\u00f6mb elemeit.<\/li>\n<li>\u00cdrd ki a\u00a0legkisebb elemet.<\/li>\n<li>Mi a legnagyobb elem sorsz\u00e1ma?<\/li>\n<li>\u00cdrd ki az elemek \u00f6sszeg\u00e9t.<\/li>\n<li>\u00cdrd ki a\u00a0p\u00e1ratlan sz\u00e1mok darabsz\u00e1m\u00e1t.<\/li>\n<li>\u00cdrd ki a negat\u00edv sz\u00e1mok \u00e1tlag\u00e1t.<\/li>\n<li>\u00cdrj ki minden m\u00e1sodik elemet.<\/li>\n<li>Rendezd a t\u00f6mb\u00f6t cs\u00f6kken\u0151 sorrendbe \u00e9s \u00edrd ki az elemeit.<\/li>\n<li>Szorozz meg minden elemet kett\u0151vel.<\/li>\n<\/ol>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nint&#x5B;] tomb = new int&#x5B;10];\r\n\r\n\/\/ 1. feladat T\u00f6ltsd fel egy 10 elem\u0171 t\u00f6mb\u00f6t v\u00e9letlen\r\n\/\/ sz\u00e1mokkal a &#x5B;-5;10] intervallumb\u00f3l.\r\nfor( int i = 0; i &lt; tomb.length; i++ )\r\n{\r\n\u00a0 tomb&#x5B;i] = (int)(Math.random() * 16) - 5;\r\n}\r\n\r\n\/\/ 2. feladat \u00cdrd ki a t\u00f6mb elemeit.\r\nSystem.out.println(&quot;\\n2. feladat&quot;);\r\nSystem.out.println(&quot;A tombben levo szamok:&quot;);\r\nfor ( int sz : tomb)\r\n{\r\n\u00a0 System.out.print(sz+&quot; &quot;);\r\n}\r\nSystem.out.println();\r\n\r\n\/\/ 3. feladat \u00cdrd ki a legkisebb elemet.\r\n\/\/ lehet foreach, nem \u00e9rdekel a helye\r\nSystem.out.println(&quot;\\n3. feladat&quot;);\r\nint min = tomb&#x5B;0];\r\nfor( int szam : tomb )\r\n{\r\n  if( szam &lt; min )\r\n  {\r\n    min = szam;\r\n  }\r\n}\r\nSystem.out.println(&quot;A tomb legkisebb eleme: &quot; + min);\r\n\r\n\/\/ 4. feladat Mi a legnagyobb elem sorsz\u00e1ma?\r\n\/\/ a helye kell, nem j\u00f3 a foreach\r\nSystem.out.println(&quot;\\n4. feladat&quot;);\r\nint max = 0;\r\nfor( int i = 1; i &lt; tomb.length; i++ )\r\n{\r\n\u00a0 if( tomb&#x5B;i] &gt; tomb&#x5B;max] )\r\n\u00a0 {\r\n\u00a0\u00a0\u00a0 max = i;\r\n\u00a0 }\r\n}\r\nSystem.out.println(&quot;A legnagyobb elem sorszama: &quot; + (max + 1));\r\n\u00a0\r\n\/\/ 5. feladat \u00cdrd ki az elemek \u00f6sszeg\u00e9t.\r\nSystem.out.println(&quot;\\n5. feladat&quot;);\r\nint osszeg = 0;\r\nfor( int sz : tomb )\r\n{\r\n\u00a0 osszeg += sz;\r\n}\r\nSystem.out.println(&quot;A tomb elemeinek osszege: &quot;+osszeg);\r\n\u00a0\r\n\/\/ 6. feladat \u00cdrd ki a p\u00e1ratlan sz\u00e1mok darabsz\u00e1m\u00e1t.\r\nSystem.out.println(&quot;\\n6. feladat&quot;);\r\nint db = 0;\r\nfor( int sz : tomb )\r\n{\r\n\u00a0 if( sz % 2 != 0 )\r\n\u00a0 {\r\n\u00a0\u00a0\u00a0 db++;\r\n\u00a0 }\r\n}\r\nSystem.out.println(&quot;A paratlan szamok darabszama: &quot; + db);\r\n\u00a0\r\n\/\/ 7. feladat \u00cdrd ki a negat\u00edv sz\u00e1mok \u00e1tlag\u00e1t.\r\nSystem.out.println(&quot;\\n7. feladat&quot;);\r\nint negosszeg = 0;\r\nint negdb = 0;\r\nfor( int sz : tomb )\r\n{\r\n\u00a0 if( sz &lt; 0 )\r\n\u00a0 {\r\n\u00a0\u00a0\u00a0 negosszeg += sz;\r\n    negdb++;\r\n\u00a0 }\r\n}\r\nSystem.out.println(&quot;A negativ szamok atlaga: &quot; +\r\n                   (double)negosszeg \/ negdb);\r\n\r\n\/\/ 8. feladat \u00cdrj ki minden m\u00e1sodik elemet.\r\nSystem.out.println(&quot;\\n7. feladat&quot;);\r\nSystem.out.print(&quot;A t\u00f6mb m\u00e1sodik elemei: &quot;);\r\nfor( int i = 1; i &lt; tomb.length; i += 2 )\r\n{\r\n\u00a0 System.out.print(tomb&#x5B;i] + &quot; &quot;);\r\n}\r\nSystem.out.println();\r\n\u00a0\r\n\/\/ 9. feladat Rendezd a t\u00f6mb\u00f6t cs\u00f6kken\u0151 sorrendbe\r\n\/\/ \u00e9s \u00edrd ki az elemeit.\r\nSystem.out.println(&quot;\\n9. feladat&quot;);\r\nint csere;\r\nfor( int i = 0; i &lt; tomb.length - 1; i++ )\r\n{\r\n\u00a0 for( int j = i + 1; j &lt; tomb.length; j++ )\r\n\u00a0 {\r\n\u00a0\u00a0\u00a0 if( tomb&#x5B;i] &lt; tomb&#x5B;j] )\r\n\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 csere = tomb&#x5B;i];\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 tomb&#x5B;i] = tomb&#x5B;j];\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 tomb&#x5B;j] = csere;\r\n\u00a0\u00a0\u00a0 }\r\n\u00a0 }\r\n}\r\nfor( int sz : tomb )\r\n{\r\n\u00a0 System.out.print(sz + &quot; &quot;);\r\n}\r\n\r\n\/\/ 10. feladat Szorozz meg minden elemet kett\u0151vel.\r\nSystem.out.println(&quot;\\n10. feladat&quot;);\r\nfor( int i = 0; i &lt; tomb.length; i++ )\r\n{\r\n\u00a0 tomb&#x5B;i] *= 2;\r\n}\r\n<\/pre>\n<p>L\u00e1thatod, hogy ahol lehetett, foreach ciklust haszn\u00e1ltam. A felt\u00f6lt\u00e9sn\u00e9l, minimumkeres\u00e9sn\u00e9l, rendez\u00e9sn\u00e9l \u00e9s a m\u00e1sodik elemek ki\u00edrat\u00e1s\u00e1n\u00e1l a fent eml\u00edtettek miatt nem haszn\u00e1lhattam, \u00edgy ott for ciklusra volt sz\u00fcks\u00e9g. Az t\u0171nhet m\u00e9g fel, hogy a foreach ciklusokn\u00e1l nem i-t haszn\u00e1lok sz\u00e1mok eset\u00e9n. Ennek csak logikailag van jelent\u0151s\u00e9ge. A kezd\u0151 programoz\u00f3kn\u00e1l i jelent\u00e9se gyakran \u00f6sszekapcsol\u00f3dik az index fogalommal, \u00edgy adott esetben ezt t\u00e9vesen haszn\u00e1ln\u00e1 fel foreach ciklus eset\u00e9n.<\/p>\n<p>M\u00e9g egyszer hangs\u00falyozom: <strong>Foreach eset\u00e9n a megadott v\u00e1ltoz\u00f3 nem index, hanem maga az aktu\u00e1lis elem.<\/strong><\/p>\n<h3>For \u00e9s foreach k\u00fcl\u00f6nbs\u00e9gek objektumok eset\u00e9n<\/h3>\n<p>Ha a t\u00f6mb\u00fcnk nem primit\u00edv \u00e9rt\u00e9keket tartalmaz, hanem objektumokat, a foreach ciklus haszn\u00e1lata akkor is egyszer\u0171. T\u00f6mb\u00f6t vagy list\u00e1t felt\u00f6lteni tov\u00e1bbra sem tudsz, de az elemeket (objektumokat) m\u00f3dos\u00edthatod. Csak arra kell \u00fcgyelni, hogy a ciklusban haszn\u00e1lt v\u00e1ltoz\u00f3 t\u00edpusa egyezzen meg a t\u00f6mb vagy lista t\u00edpus\u00e1val.<\/p>\n<p>Na de ne szaladjunk ennyire el\u0151re. A feladatban kuty\u00e1k objektumaival dolgozunk. A kuty\u00e1knak van fajt\u00e1ja, \u00e9letkora \u00e9s sz\u00edne. El\u0151sz\u00f6r a vizsl\u00e1k \u00e9letkor\u00e1nak \u00f6sszeg\u00e9t kell kisz\u00e1m\u00edtani, majd minden kutya \u00e9letkor\u00e1t meg kell n\u00f6velni eggyel. Ehhez a kutya oszt\u00e1ly tartalmaz egy setKor() nev\u0171 met\u00f3dust, mellyel a kutya \u00e9letkora be\u00e1ll\u00edthat\u00f3. Mivel a leck\u00e9kben az <a title=\"Java programoz\u00e1s 21. \u2013 ArrayList\" href=\"http:\/\/www.webotlet.hu\/?p=775\">ArrayList<\/a> is tananyag volt, \u00e9s a kuty\u00e1kat t\u00f6mbben \u00e9s list\u00e1ban is t\u00e1rolhatom, mindkett\u0151re mutatok p\u00e9ld\u00e1t. L\u00e1ssuk akkor a for ciklusos megold\u00e1st t\u00f6mbbel \u00e9s list\u00e1val.<\/p>\n<h5>For ciklus t\u00f6mbbel:<\/h5>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nKutya&#x5B;] kutyak =\r\n{\r\n  new Kutya(&quot;vizsla&quot;, 6, &quot;arany&quot;),\r\n  new Kutya(&quot;vizsla&quot;, 3, &quot;fekete&quot;),\r\n  new Kutya(&quot;labrador&quot;, 7, &quot;zsemle&quot;),\r\n  new Kutya(&quot;labrador&quot;, 7, &quot;fekete&quot;),\r\n  new Kutya(&quot;vizsla&quot;, 3, &quot;barna&quot;),\r\n  new Kutya(&quot;labrador&quot;, 7, &quot;barna&quot;),\r\n};\r\n\r\nint osszeg = 0;\r\nfor( int i = 0; i &lt; kutyak.length; i++ )\r\n{\r\n  if( kutyak&#x5B;i].getFajta().equalsIgnoreCase(&quot;vizsla&quot;) )\r\n  {\r\n    osszeg += kutyak&#x5B;i].getKor();\r\n  }\r\n}\r\nSystem.out.println(&quot;A vizslak eletkoranak osszege: &quot;+osszeg);\r\n\r\nfor( int i = 0; i &lt; kutyak.length; i++ )\r\n{\r\n\u00a0 kutyak&#x5B;i].setKor( kutyak&#x5B;i].getKor()+1 );\r\n}\r\n<\/pre>\n<h5>For ciklus list\u00e1val:<\/h5>\n<pre class=\"brush: java; gutter: true; highlight: [13]; title: ; notranslate\" title=\"\">\r\nArrayList&lt;Kutya&gt; kutyak = new ArrayList&lt;Kutya&gt;();\r\n\r\nkutyak.add( new Kutya(&quot;vizsla&quot;, 6, &quot;arany&quot;) );\r\nkutyak.add( new Kutya(&quot;vizsla&quot;, 3, &quot;fekete&quot;) );\r\nkutyak.add( new Kutya(&quot;labrador&quot;, 7, &quot;zsemle&quot;) );\r\nkutyak.add( new Kutya(&quot;labrador&quot;, 7, &quot;fekete&quot;) );\r\nkutyak.add( new Kutya(&quot;vizsla&quot;, 3, &quot;barna&quot;) );\r\nkutyak.add( new Kutya(&quot;labrador&quot;, 7, &quot;barna&quot;) );\r\n\r\nint osszeg = 0;\r\nfor( int i = 0; i &lt; kutyak.size(); i++ )\r\n{\r\n  if( kutyak.get(i).getFajta().equalsIgnoreCase(&quot;vizsla&quot;) )\r\n  {\r\n    osszeg += kutyak.get(i).getKor();\r\n  }\r\n}\r\nSystem.out.println(&quot;A vizslak eletkoranak osszege: &quot;+osszeg);\r\n\r\nfor( int i = 0; i &lt; kutyak.size(); i++ )\r\n{\r\n\u00a0 kutyak.get(i).setKor( kutyak.get(i).getKor()+1 );\r\n}\r\n<\/pre>\n<p>Ha megn\u00e9zed, a for ciklus eset\u00e9n k\u00fcl\u00f6nbs\u00e9g van a k\u00e9t megold\u00e1s k\u00f6z\u00f6tt. T\u00f6mb eset\u00e9n a ciklus fut\u00e1si felt\u00e9tele <strong>kutyak.length<\/strong>, lista eset\u00e9n pedig <strong>kutyak.size()<\/strong>. M\u00e1sr\u00e9szt amikor egy konkr\u00e9t kuty\u00e1t vizsg\u00e1lunk, akkor t\u00f6mb eset\u00e9n az adott elemet az indexe alapj\u00e1n a <strong>kutyak[i]<\/strong>-vel \u00e9rhetj\u00fck el, m\u00edg list\u00e1n\u00e1l a <strong>kutyak.get(i)<\/strong> met\u00f3dussal. M\u00e1sr\u00e9szt lista eset\u00e9n a kiemelt sor kezd\u0151ket az\u00e9rt zavarba is tud hozni, hogy akkor most melyik r\u00e9sz pontosan micsoda. V\u00e9g\u00fcl is a l\u00e9nyeg l\u00e1tszik: <strong>m\u00e1s adatszerkezet, m\u00e1s ciklusmag<\/strong>. A foreach enn\u00e9l egyszer\u0171bb lenne?<\/p>\n<h5>Foreach ciklus t\u00f6mbbel:<\/h5>\n<pre class=\"brush: java; gutter: true; highlight: [12,13,14,15,16,17,18,21,22,23,24]; title: ; notranslate\" title=\"\">\r\nKutya&#x5B;] kutyak =\r\n{\r\n  new Kutya(&quot;vizsla&quot;, 6, &quot;arany&quot;),\r\n  new Kutya(&quot;vizsla&quot;, 3, &quot;fekete&quot;),\r\n  new Kutya(&quot;labrador&quot;, 7, &quot;zsemle&quot;),\r\n  new Kutya(&quot;labrador&quot;, 7, &quot;fekete&quot;),\r\n  new Kutya(&quot;vizsla&quot;, 3, &quot;barna&quot;),\r\n  new Kutya(&quot;labrador&quot;, 7, &quot;barna&quot;),\r\n};\r\n\r\nint osszeg = 0;\r\nfor( Kutya k : kutyak )\r\n{\r\n  if( k.getFajta().equalsIgnoreCase(&quot;vizsla&quot;) )\r\n  {\r\n    osszeg += k.getKor();\r\n  }\r\n}\r\nSystem.out.println(&quot;A vizslak eletkoranak osszege: &quot;+osszeg);\r\n\r\nfor( Kutya k : kutyak )\r\n{\r\n  k.setKor( k.getKor()+1 );\r\n}\r\n<\/pre>\n<h5>Foreach ciklus list\u00e1val:<\/h5>\n<pre class=\"brush: java; gutter: true; highlight: [11,12,13,14,15,16,17,20,21,22,23]; title: ; notranslate\" title=\"\">\r\nArrayList&lt;Kutya&gt; kutyak = new ArrayList&lt;Kutya&gt;();\r\n\r\nkutyak.add( new Kutya(&quot;vizsla&quot;, 6, &quot;arany&quot;) );\r\nkutyak.add( new Kutya(&quot;vizsla&quot;, 3, &quot;fekete&quot;) );\r\nkutyak.add( new Kutya(&quot;labrador&quot;, 7, &quot;zsemle&quot;) );\r\nkutyak.add( new Kutya(&quot;labrador&quot;, 7, &quot;fekete&quot;) );\r\nkutyak.add( new Kutya(&quot;vizsla&quot;, 3, &quot;barna&quot;) );\r\nkutyak.add( new Kutya(&quot;labrador&quot;, 7, &quot;barna&quot;) );\r\n\r\nint osszeg = 0;\r\nfor( Kutya k : kutyak )\r\n{\r\n  if( k.getFajta().equalsIgnoreCase(&quot;vizsla&quot;) )\r\n  {\r\n    osszeg += k.getKor();\r\n  }\r\n}\r\nSystem.out.println(&quot;A vizslak eletkoranak osszege: &quot;+osszeg);\r\n\r\nfor( Kutya k : kutyak )\r\n{\r\n\u00a0 k.setKor( k.getKor()+1 );\r\n}\r\n<\/pre>\n<p>Hopp\u00e1! A k\u00e9t kiemelt r\u00e9sz ugyanaz? A CTRL-C \u00e9s CTRL-V \u00e9sz n\u00e9lk\u00fcli haszn\u00e1lata nagyon sokszor fog m\u00e9g boldog\u00edtani programoz\u00e1skor. De nem itt! Foreach ciklus eset\u00e9n m\u00e1r tiszt\u00e1ztuk, hogy az objektumhoz nem indexel\u00e9ssel f\u00e9r\u00fcnk hozz\u00e1, hanem a k v\u00e1ltoz\u00f3ban maga az adott kutya van, ahol \u00e9ppen a bej\u00e1r\u00e1s sor\u00e1n tartunk.<\/p>\n<p>A kiemelt r\u00e9szekben azt l\u00e1thatod, hogy foreach ciklus eset\u00e9n teljesen mindegy, hogy list\u00e1val vagy t\u00f6mbbel dolgozunk, az aktu\u00e1lis elemet mindenk\u00e9ppen a k v\u00e1ltoz\u00f3ba rakja. Nem \u00e9rdekli az adatszerkezet, amivel dolgoznia kell. Csak v\u00e9gigmegy az elemein \u00e9s k\u00e9sz. Berakja azokat a megfelel\u0151 v\u00e1ltoz\u00f3ba, azon kereszt\u00fcl meg mindenhez hozz\u00e1f\u00e9rhet\u00fcnk, amit a k\u00f3dok megengednek.<\/p>\n<p>A <strong>k.setKor( k.getKor()+1 );<\/strong> sorokban pedig arra l\u00e1thatsz p\u00e9ld\u00e1t, hogy referencia t\u00edpus\u00fa v\u00e1ltoz\u00f3k eset\u00e9n a t\u00f6mb vagy lista aktu\u00e1lis elem\u00e9t ak\u00e1r m\u00f3dos\u00edtani is tudod. Eml\u00e9kszel, primit\u00edv v\u00e1ltoz\u00f3k (sz\u00e1mt\u00f6mb) eset\u00e9n ezt nem teheted meg!<\/p>\n<p>A foreach ciklust a p\u00e9ld\u00e1k alapj\u00e1n sokkal rugalmasabban haszn\u00e1lhatjuk. A k\u00f3d r\u00f6videbb, \u00e1tl\u00e1that\u00f3bb lesz, valamint a megold\u00e1s f\u00fcggetlen a haszn\u00e1lt adatszerkezett\u0151l. Azokra kell csak eml\u00e9kezni, hogy milyen korl\u00e1tai vannak ennek a ciklusnak. A k\u00e9s\u0151bbiekben megismer\u00fcnk majd \u00faj adatszerkezeteket is, amelyn\u00e9l az el\u0151z\u0151ekhez hasonl\u00f3an szint\u00e9n k\u00f6nnyen hozz\u00e1f\u00e9rhet\u00fcnk a benne t\u00e1rolt adatokhoz, m\u00e9gis egy\u00e9rtelm\u0171 lesz, hogy mit is csin\u00e1lunk.<\/p>\n<p><strong>Ahol lehet, haszn\u00e1lj foreach ciklust!<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>A ciklusok k\u00f6z\u00fcl nagyon sokra az\u00e9rt van sz\u00fcks\u00e9g, hogy t\u00f6mb\u00f6ket, list\u00e1kat j\u00e1rjunk be vel\u00fck. Mivel az elemeken rendszerint sorrendben \u00e9s egyes\u00e9vel kell v\u00e9gigl\u00e9pkedn\u00fcnk, nagyon sok ciklusunk feje teljesen ugyan\u00fagy n\u00e9z ki. \u00a0L\u00e9nyegi k\u00fcl\u00f6nbs\u00e9g csak a ciklusmagban van, att\u00f3l f\u00fcgg\u0151en, hogy <a class=\"more-link\" href=\"https:\/\/www.webotlet.hu\/?p=1312\">Tov\u00e1bb <span class=\"screen-reader-text\">  Java kieg\u00e9sz\u00edt\u0151 lecke &#8211; Foreach ciklus<\/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":[101],"tags":[105,18,86,20,143],"class_list":["post-1312","post","type-post","status-publish","format-standard","hentry","category-java-kiegeszito-leckek","tag-for-each","tag-foreach","tag-java","tag-objektum","tag-programozas"],"_links":{"self":[{"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=\/wp\/v2\/posts\/1312","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=1312"}],"version-history":[{"count":43,"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=\/wp\/v2\/posts\/1312\/revisions"}],"predecessor-version":[{"id":3114,"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=\/wp\/v2\/posts\/1312\/revisions\/3114"}],"wp:attachment":[{"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1312"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1312"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1312"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}