{"id":587,"date":"2014-09-28T22:16:35","date_gmt":"2014-09-28T20:16:35","guid":{"rendered":"http:\/\/www.webotlet.hu\/?p=587"},"modified":"2016-09-04T11:29:06","modified_gmt":"2016-09-04T09:29:06","slug":"java-programozas-17-tobb-dimezios-tombok","status":"publish","type":"post","link":"https:\/\/www.webotlet.hu\/?p=587","title":{"rendered":"Java programoz\u00e1s 17. &#8211; T\u00f6bbdimenzi\u00f3s t\u00f6mb\u00f6k"},"content":{"rendered":"<h1>T\u00f6bbdimenzi\u00f3s t\u00f6mb\u00f6k, avagy t\u00f6mb\u00f6k egy csokorban<\/h1>\n<p>A t\u00f6mb, mint \u00f6sszetett adatt\u00edpus az el\u0151z\u0151 anyagokb\u00f3l m\u00e1r ismer\u0151s lehet. M\u00edg a t\u00f6mb\u00f6k egy adatsort tartalmaznak, a t\u00f6bbdimenzi\u00f3s t\u00f6mb\u00f6k pedig t\u00f6bbet. A t\u00f6bbdimenzi\u00f3s t\u00f6mb\u00f6k val\u00f3j\u00e1ban t\u00f6mb\u00f6k t\u00f6mbjei. A dimenzi\u00f3k sz\u00e1ma elm\u00e9letileg nincs korl\u00e1tozva, gyakorlatilag 3 dimenzi\u00f3n\u00e1l t\u00f6bbel dolgozni nem felt\u00e9tlen\u00fcl praktikus.<\/p>\n<p>Egy \u00e1ltal\u00e1nos t\u00f6mb deklar\u00e1ci\u00f3ja a k\u00f6vetkez\u0151k\u00e9pp n\u00e9z ki:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\n\/\/ deklar\u00e1l\u00e1s \u00e9s inicializ\u00e1l\u00e1s, ami csak 0 \u00e9rt\u00e9kekkel t\u00f6lti fel a t\u00f6mb\u00f6t\r\nint&#x5B;] tomb = new int&#x5B;10];\r\n\r\n\/\/ deklar\u00e1l\u00e1s \u00e9s azonnali kezd\u0151\u00e9rt\u00e9k ad\u00e1s\r\nint&#x5B;] tomb = {1,2,3,4,5,6,7,8,9,10};\r\n\r\n\/\/ adott index\u0171 elem kiv\u00e1laszt\u00e1sa\r\ntomb&#x5B;5]\r\n<\/pre>\n<p>Ez a t\u00f6bbdimenzi\u00f3s t\u00f6mb\u00f6k eset\u00e9n is hasonl\u00f3, de mivel ezek t\u00f6mb\u00f6k t\u00f6mbjei, ez\u00e9rt ezt formailag is jelezni kell.<\/p>\n<h4>K\u00e9tdimenzi\u00f3s t\u00f6mb\u00f6k<\/h4>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\n\/\/ k\u00e9tdimenzi\u00f3s t\u00f6mb deklar\u00e1l\u00e1sa \u00e9s inicializ\u00e1l\u00e1sa\r\nint&#x5B;]&#x5B;] tomb = new int&#x5B;2]&#x5B;3];\r\n\r\n\/\/ k\u00e9tdimenzi\u00f3s t\u00f6mb adott elem\u00e9nek kiv\u00e1laszt\u00e1sa\r\ntomb&#x5B;1]&#x5B;2]\r\n<\/pre>\n<p>Az el\u0151z\u0151 deklar\u00e1l\u00e1s azt jelenti, hogy l\u00e9trehozunk egy 2 sorb\u00f3l \u00e9s 3 oszlopb\u00f3l \u00e1ll\u00f3 k\u00e9tdimenzi\u00f3s t\u00f6mb\u00f6t. A sorok \u00e9s oszlopok sorsz\u00e1moz\u00e1sa (indexel\u00e9se) itt is 0-val indul, mint \u00e1ltal\u00e1ban a t\u00f6mb\u00f6k eset\u00e9n. Mint m\u00e1r eml\u00edtettem, a t\u00f6bbdimenzi\u00f3s t\u00f6mb val\u00f3j\u00e1ban t\u00f6mb\u00f6k t\u00f6mbje, de formailag ez hogy n\u00e9z ki? N\u00e9zz\u00fck meg egy konkr\u00e9t p\u00e9ld\u00e1n kereszt\u00fcl:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nint&#x5B;]&#x5B;] tomb = { { 2,4,6 }, { 3,7,8 } };\r\n<\/pre>\n<p>Mit is jelent ez? Adott k\u00e9t sor (a k\u00e9t kicsi t\u00f6mb darabsz\u00e1ma, ami a sz\u00e1mokat tartalmazza) \u00e9s adott 3 oszlop (ami a kis t\u00f6mb\u00f6kben l\u00e9v\u0151 sz\u00e1mok darabsz\u00e1m\u00e1t jelenti). L\u00e1thatod, hogy a kis t\u00f6mb\u00f6kben l\u00e9v\u0151 sz\u00e1mok darabsz\u00e1ma megegyezik, ez nem v\u00e9letlen. Val\u00f3j\u00e1ban ez a sz\u00e1m az oszlopok sz\u00e1ma. Hogy jobban l\u00e1that\u00f3 legyen, \u00e1trendezem az el\u0151z\u0151 p\u00e9ld\u00e1ban szerepl\u0151 t\u00f6mb szerkezet\u00e9t:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nint&#x5B;]&#x5B;] tomb = {\r\n                 { 2,4,6 },\r\n                 { 3,7,8 }\r\n               };\r\n<\/pre>\n<p>\u00cdgy m\u00e1r egy\u00e9rtelm\u0171bb, hogy mit jelent a sorok \u00e9s oszlopok sz\u00e1ma. A k\u00e9t kis bels\u0151 t\u00f6mb jelenti a sorokat, egym\u00e1s al\u00e1 \u00edrva \u0151ket, val\u00f3ban sorokat alkotnak. A benn\u00fck l\u00e9v\u0151 elemek sz\u00e1ma pedig k\u00f6t\u00f6tt, mert ez jelenti az oszlopok sz\u00e1m\u00e1t. A k\u00e9t sort \u00f6sszefog\u00f3 k\u00fcls\u0151 t\u00f6mb hat\u00e1rol\u00f3it direkt k\u00fcl\u00f6n sorba \u00edrtam, hogy az ne zavarjon, de az is a strukt\u00fara r\u00e9sze. Amikor hivatkozunk egy elemre (tomb[1][2]), akkor azt mondjuk meg, hogy az 1-es index\u0171 kis t\u00f6mbnek (a m\u00e1sodiknak) a 2-es oszlop\u00e1ban (a harmadikban) l\u00e9v\u0151 8-as elemre gondolunk. Ne feledd, a sor \u00e9s oszlop indexel\u00e9se is 0-val kezd\u0151dik.<\/p>\n<p>A k\u00e9tdimenzi\u00f3s t\u00f6mb\u00f6k kezel\u00e9s\u00e9hez szinte minden esetben k\u00e9t egym\u00e1sba \u00e1gyazott ciklusra van sz\u00fcks\u00e9g, olyanokra, mint amilyeneket a rendez\u00e9sekn\u00e9l is l\u00e1thatt\u00e1l. A k\u00fcls\u0151 ciklus a sorsz\u00e1mot, a bels\u0151 az oszlopsz\u00e1mot l\u00e9pteti. N\u00e9zz\u00fck meg, hogy n\u00e9z ez ki:<\/p>\n<pre class=\"brush: java; gutter: true; highlight: [3]; title: ; notranslate\" title=\"\">\r\nfor( int i = 0; i &lt; tomb.length; i++ )\r\n{\r\n  for( int j = 0; j &lt; tomb&#x5B;i].length; j++ )\r\n  {\r\n    tomb&#x5B;i]&#x5B;j] = (int)(Math.random()*10);\r\n  }\r\n}\r\n<\/pre>\n<p>Ez a p\u00e9lda v\u00e9gigmegy a t\u00f6mb \u00f6sszes elem\u00e9n, \u00e9s mindegyiket egy [0;9] intervallumb\u00f3l sorsolt sz\u00e1mmal t\u00f6lt fel. L\u00e1thatod, hogy van egy t\u00f6mbelem kiv\u00e1laszt\u00e1s (tomb[i][j]), ami az el\u0151z\u0151leg ismertetett m\u00f3don [sor][oszlop] v\u00e1lasztja ki az adott elemet. Mivel a k\u00e9s\u0151bbiekben nagy val\u00f3sz\u00edn\u0171s\u00e9ggel mindig ugyanolyan nev\u0171 v\u00e1ltoz\u00f3kat haszn\u00e1lsz, ez\u00e9rt j\u00f3 ha megjegyzed, hogy az i v\u00e1ltoz\u00f3val jel\u00f6l\u00f6d a sorokat, \u00e9s j-vel az oszlopokat. Ez a k\u00e9s\u0151bbiekben fontos lesz, hogy tudd, melyik melyik.<br \/>\nA kiemelt sorban van igaz\u00e1b\u00f3l az \u00e9rdekess\u00e9g, ami els\u0151re furcsa lehet. A t\u00f6mb i index\u0171 elem\u00e9nek t\u00f6mbm\u00e9rete? K\u00e9tdimenzi\u00f3s t\u00f6mbben a t\u00f6mb deklar\u00e1l\u00e1sa ut\u00e1n az inicializ\u00e1l\u00e1skor meg kell hat\u00e1rozni a t\u00f6mb m\u00e9ret\u00e9t. \u00cdgy van ez az alap t\u00f6mb\u00f6k eset\u00e9n is, \u00e9s \u00edgy van ez itt is. A k\u00fcl\u00f6nbs\u00e9g az, hogy itt k\u00fcl\u00f6n kell be\u00e1ll\u00edtani a sorok \u00e9s oszlopok sz\u00e1m\u00e1t. El\u0151sz\u00f6r a sorok, ut\u00e1na az oszlopok sz\u00e1m\u00e1t. De akkor a tomb.length melyiket adja meg a kett\u0151 k\u00f6z\u00fcl, \u00e9s hogy kapjuk meg a m\u00e1sikat? Tiszt\u00e1zzunk akkor p\u00e1r sarokpontot az ilyen t\u00f6mb\u00f6k kezel\u00e9s\u00e9vel kapcsolatban<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\ntomb.length;    \/\/ sorok sz\u00e1ma (a kis t\u00f6mb\u00f6k darabsz\u00e1ma)\r\ntomb&#x5B;1];        \/\/ az 1-es index\u0171 sor elemei (2. sor t\u00f6mbje)\r\ntomb&#x5B;i].length; \/\/ oszlopok sz\u00e1ma (az i index\u0171 t\u00f6mbben l\u00e9v\u0151 elemek sz\u00e1ma)\r\ntomb&#x5B;3]&#x5B;2];     \/\/ t\u00f6mbben t\u00e1rolt elem, ami a 4. sor 3. oszlop\u00e1ban van\r\n<\/pre>\n<p>Az oszlopok sz\u00e1m\u00e1t mi\u00e9rt egy i index\u0171 sor m\u00e9ret\u00e9b\u0151l kapjuk meg, mi\u00e9rt nem fixen a 0 index\u0171 sor m\u00e9ret\u00e9b\u0151l? Az\u00e9rt, mert l\u00e9tezik egy speci\u00e1lis t\u00f6bbdimenzi\u00f3s t\u00f6mbt\u00edpus, melyet nagyon ritk\u00e1n haszn\u00e1lunk, \u00e9s ott elt\u00e9rhet az egyes sorok (kis t\u00f6mb\u00f6k) m\u00e9rete, \u00edgy mindig az aktu\u00e1lis sor m\u00e9ret\u00e9vel dolgozzunk.<\/p>\n<h4>K\u00e9tdimenzi\u00f3s t\u00f6mb\u00f6k bej\u00e1r\u00e1sa<\/h4>\n<ol>\n<li><strong>az \u00f6sszes elem bej\u00e1r\u00e1sa:<\/strong><br \/>\nEbben az esetben k\u00e9t ciklusra van sz\u00fcks\u00e9g, amire m\u00e1r l\u00e1tt\u00e1l p\u00e9ld\u00e1t a t\u00f6mb felt\u00f6lt\u00e9s\u00e9n\u00e9l.<\/li>\n<li><strong>egy sor bej\u00e1r\u00e1sa:<\/strong><br \/>\nEkkor el\u00e9g csak egy konkr\u00e9t soron v\u00e9gigmenni egyetlen ciklussal. Ebben a p\u00e9ld\u00e1ban a 3. sor \u00f6sszes elem\u00e9t \u00edrjuk ki egym\u00e1s mell\u00e9. Ez a k\u00f6vetkez\u0151k\u00e9pp n\u00e9z ki:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nfor( int j = 0; j &lt; tomb&#x5B;2].length; j++ )\r\n{\r\n  System.out.print(tomb&#x5B;2]&#x5B;j]+&quot; &quot;);\r\n}\r\n<\/pre>\n<p>Ebben az esetben l\u00e1thatjuk, hogy a tomb[2]-re hivatkozok fixen, t\u00f6bb helyen is. El\u0151sz\u00f6r a ciklus fej\u00e9ben, ahol a 2-es index\u0171 (3.) sor elemeit akarom ki\u00edrni. Valamint a konkr\u00e9t elem kiv\u00e1laszt\u00e1s\u00e1n\u00e1l is l\u00e1tszik, hogy csak a 2-es index\u0171 sor szerepel, de azon bel\u00fcl a j-vel v\u00e9gigl\u00e9pkedek a sor \u00f6sszes elem\u00e9n (oszlop\u00e1n). Technikailag a j helyett itt i is lehetne ciklusv\u00e1ltoz\u00f3, a program akkor is t\u00f6k\u00e9letesen m\u0171k\u00f6dne. Logikailag az\u00e9rt szoktam javasolni, hogy j legyen, mert akkor jobban r\u00f6gz\u00fcl, hogy a j az oszlopokat jelenti, \u00e9s most csak az oszlop v\u00e1ltozik, a sor k\u00f6t\u00f6tt.<\/li>\n<li><strong>egy oszlop bej\u00e1r\u00e1sa:<\/strong><br \/>\nAz el\u0151z\u0151h\u00f6z hasonl\u00f3an itt is el\u00e9g egyetlen ciklus, hiszen egyetlen oszlopon kell csak v\u00e9gigmenni. Ekkor az oszlop sz\u00e1ma k\u00f6t\u00f6tt \u00e9s csak a sorsz\u00e1m v\u00e1ltozik. Ez \u00edgy n\u00e9z ki:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nfor( int i = 0; i &lt; tomb.length; i++ )\r\n{\r\n  System.out.println(tomb&#x5B;i]&#x5B;4]);\r\n}\r\n<\/pre>\n<\/li>\n<\/ol>\n<p>L\u00e1thatod, hogy a ciklus fej\u00e9ben m\u00e1shogy szerepel a fut\u00e1si felt\u00e9tel, csak tomb.length szerepel, ami a sorok sz\u00e1m\u00e1t jelenti. A ciklusmagban pedig az adott elem kiv\u00e1laszt\u00e1sakor a oszlopsz\u00e1m fix (jelen esetben a 4-es index\u0171 5. sor) \u00e9s az sorsz\u00e1m az, ami v\u00e1ltozik, ez\u00e9rt haszn\u00e1ltam i ciklusv\u00e1ltoz\u00f3t.<\/p>\n<p>Most m\u00e1r tetsz\u0151leges k\u00e9tdimenzi\u00f3s t\u00f6mb\u00f6t be tudunk j\u00e1rni, j\u00f6hetnek az ezzel kapcsolatos feladatok. Az els\u0151 feladat a t\u00f6mb felt\u00f6lt\u00e9se, a t\u00f6bbi feladatban pedig ezzel a t\u00f6mbbel dolgozn\u00e1nk.<\/p>\n<h4>Gyakorl\u00f3 feladatok<\/h4>\n<ol>\n<li>T\u00f6lts fel egy 3&#215;5-\u00f6s k\u00e9tdimenzi\u00f3s t\u00f6mb\u00f6t a [-10;30] intervallumb\u00f3l:\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nint&#x5B;]&#x5B;] tomb = new int&#x5B;3]&#x5B;5];\r\n\r\nfor( int i = 0; i &lt; tomb.length; i++ )\r\n{\r\n  for( int j = 0; j &lt; tomb&#x5B;i].length; j++ )\r\n  {\r\n    tomb&#x5B;i]&#x5B;j] = (int)(Math.random()*41)-10;\r\n  }\r\n}\r\n<\/pre>\n<\/li>\n<li>\u00cdrd ki a t\u00f6mb\u00f6t sorokba \u00e9s oszlopokba rendezve:\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nint&#x5B;]&#x5B;] tomb = new int&#x5B;3]&#x5B;5];\r\n\r\nfor( int i = 0; i &lt; tomb.length; i++ )\r\n{\r\n  for( int j = 0; j &lt; tomb&#x5B;i].length; j++ )\r\n  {\r\n\/\/ egym\u00e1s mell\u00e9 \u00edrom ki egy sor elemeit\r\n    System.out.print(tomb&#x5B;i]&#x5B;j]+&quot; &quot;);\r\n  }\r\n\/\/ ha v\u00e9geztem egy sor ki\u00edr\u00e1s\u00e1val, akkor \u00faj sort kezdek\r\n  System.out.println();\r\n}\r\n<\/pre>\n<\/li>\n<li>\u00cdrd ki a t\u00f6mbben szerepl\u0151 sz\u00e1mok \u00f6sszeg\u00e9t:\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nint osszeg = 0;\r\nfor( int i = 0; i &lt; tomb.length; i++ )\r\n{\r\n  for( int j = 0; j &lt; tomb&#x5B;i].length; j++ )\r\n  {\r\n    osszeg = osszeg + tomb&#x5B;i]&#x5B;j];\r\n\/\/ vagy osszeg += tomb&#x5B;i]&#x5B;j];\r\n  }\r\n}\r\nSystem.out.println(&quot;A tomb elemeinek osszege&quot;+osszeg);\r\n<\/pre>\n<\/li>\n<li>\u00cdrd ki a 2. sor \u00f6sszeg\u00e9t:\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nint osszeg = 0;\r\nfor( int j = 0; j &lt; tomb&#x5B;1].length; j++ )\r\n{\r\n  osszeg = osszeg + tomb&#x5B;1]&#x5B;j];\r\n\/\/ vagy osszeg += tomb&#x5B;1]&#x5B;j];\r\n}\r\nSystem.out.println(&quot;A 2. sor osszege&quot;+osszeg);\r\n<\/pre>\n<\/li>\n<li>Sz\u00e1mold meg, h\u00e1ny negat\u00edv sz\u00e1m szerepel a t\u00f6mbben:\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nint db = 0;\r\nfor( int i = 0; i &lt; tomb.length; i++ )\r\n{\r\n  for( int j = 0; j &lt; tomb&#x5B;i].length; j++ )\r\n  {\r\n    if( tomb&#x5B;i]&#x5B;j] &lt; 0 )\r\n    {\r\n      db++;\r\n    }\r\n  }\r\n}\r\nSystem.out.println(&quot;A tombben &quot;+db+&quot; negativ szam van.&quot;);\r\n<\/pre>\n<\/li>\n<li>Sz\u00e1mold meg, h\u00e1ny p\u00e1ros sz\u00e1m tal\u00e1lhat\u00f3 a 3. oszlopban:\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nint db = 0;\r\nfor( int i = 0; i &lt; tomb.length; i++ )\r\n{\r\n  if( tomb&#x5B;i]&#x5B;2] % 2 == 0 )\r\n  {\r\n    db++;\r\n  }\r\n}\r\nSystem.out.println(&quot;A tomb 3. oszlopaban &quot;+db+&quot; paros szam van.&quot;);\r\n<\/pre>\n<\/li>\n<li>\u00cdrd ki, melyik a legkisebb elem a t\u00f6mbben:Ez a feladat nem teljesen ugyanaz, mint amit a minimumkeres\u00e9sn\u00e9l l\u00e1thatt\u00e1l. Arra rem\u00e9lem eml\u00e9kszel, hogy a minimumnak a hely\u00e9t, \u00e9s nem az \u00e9rt\u00e9k\u00e9t t\u00e1roljuk, mert a hely\u00e9b\u0151l k\u00e9t dologra is v\u00e1laszolhatunk, ezt most nem \u00edrn\u00e1m le \u00fajra. De itt a hely nem egy index, hanem kett\u0151: [oszlop][sor]<br \/>\nK\u00e9t dolgot tehetsz. Vagy k\u00e9t v\u00e1ltoz\u00f3t haszn\u00e1lsz a hely t\u00e1rol\u00e1s\u00e1ra (egyet a sornak, egyet az oszlopnak), vagy egy k\u00e9t elem\u0171 t\u00f6mbben t\u00e1rolod, valahogy \u00edgy:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nint&#x5B;] min = new int&#x5B;2];\r\nmin&#x5B;0] = sor;\r\nmin&#x5B;1] = oszlop;\r\n<\/pre>\n<p>Vagy t\u00e1rolhatod k\u00e9t v\u00e1ltoz\u00f3ban is:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nint minI = sor;\r\nint minJ = oszlop;\r\n<\/pre>\n<p>R\u00e1d b\u00edzom melyiket haszn\u00e1lod, a l\u00e9nyeg, hogy helyesen tedd. L\u00e1ssunk akkor p\u00e9ld\u00e1t a bonyolultabbra:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nint&#x5B;] min = new int&#x5B;2];\r\n\/\/ ebben a k\u00e9t sorban \u00e1ll\u00edtom be, hogy az els\u0151 elem az els\u0151 minimum\r\nmin&#x5B;0] = 0;\r\nmin&#x5B;1] = 0;\r\n\r\nfor( int i = 0; i &lt; tomb.length; i++ )\r\n{\r\n  for( int j = 0; j &lt; tomb&#x5B;i].length; j++ )\r\n  {\r\n\/\/ ha a t\u00f6mb aktu\u00e1lis eleme kisebb, mint az eddigi minimum\r\n\/\/ ahol a minimum elem sora min&#x5B;0], oszlopa min&#x5B;1]\r\n    if( tomb&#x5B;i]&#x5B;j] &lt; tomb&#x5B; min&#x5B;0] ]&#x5B; min&#x5B;1] ] )\r\n    {\r\n      min&#x5B;0] = i;\r\n      min&#x5B;1] = j;\r\n    }\r\n  }\r\n}\r\n\/\/ na itt ne keverd \u00f6ssze a &#x5B; ] jeleket...\r\nSystem.out.println(&quot;A tomb legkisebb eleme: &quot;+tomb&#x5B;min&#x5B;0]]&#x5B;min&#x5B;1]]);\r\n<\/pre>\n<p>Az\u00e9rt hasonl\u00edtsuk ezt \u00f6ssze azzal, ha k\u00e9t k\u00fcl\u00f6n v\u00e1ltoz\u00f3ban t\u00e1rolod a minimum elem sor\u00e1t \u00e9s oszlop\u00e1t:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\n\/\/ ebben a k\u00e9t sorban \u00e1ll\u00edtom be, hogy az els\u0151 elem az els\u0151 minimum\r\nint minI = 0;\r\nint minJ = 0;\r\n\r\nfor( int i = 0; i &lt; tomb.length; i++ )\r\n{\r\n  for( int j = 0; j &lt; tomb&#x5B;i].length; j++ )\r\n  {\r\n\/\/ ha a t\u00f6mb aktu\u00e1lis eleme kisebb, mint az eddigi minimum\r\n\/\/ ahol a minimum elem sora min&#x5B;0], oszlopa min&#x5B;1]\r\n    if( tomb&#x5B;i]&#x5B;j] &lt; tomb&#x5B;minI]&#x5B;minJ] )\r\n    {\r\n      minI = i;\r\n      minJ = j;\r\n    }\r\n  }\r\n}\r\n\/\/ na itt ne keverd \u00f6ssze a &#x5B; ] jeleket...\r\nSystem.out.println(&quot;A tomb legkisebb eleme: &quot;+tomb&#x5B;minI]&#x5B;minJ]);\r\n<\/pre>\n<p>Tal\u00e1n a k\u00e9t k\u00fcl\u00f6n v\u00e1ltoz\u00f3 kicsit bar\u00e1ts\u00e1gosabb.<\/p>\n<p>Ha igaz\u00e1n figyelt\u00e9l az eddigiekben, kisz\u00farhattad, hogy m\u00e1s k\u00fcl\u00f6nbs\u00e9g is van a minimumkeres\u00e9shez k\u00e9pest, azon k\u00edv\u00fcl, hogy itt a minimum hely\u00e9t \u00e9rtelemszer\u0171en k\u00e9t sz\u00e1mk\u00e9nt t\u00e1roljuk. Figyeld meg, honnan indulnak itt a ciklusok. Nem 1-t\u0151l! A minimumkeres\u00e9sn\u00e9l eml\u00e9kezhetsz, hogy az els\u0151 (0 index\u0171) elem a legkisebb, ez\u00e9rt a ciklus 1-es indext\u0151l kezd\u0151dik, hogy \u00f6nmag\u00e1val m\u00e1r ne hasonl\u00edtsuk \u00f6ssze. Itt ezt nem tehetj\u00fck meg. Mi\u00e9rt?<\/p>\n<p>Ha a k\u00fcls\u0151 ciklusban az i v\u00e1ltoz\u00f3 1-t\u0151l indulna, akkor az els\u0151 (0 index\u0171) sor teljesen kimaradna a vizsg\u00e1latb\u00f3l. Ha a bels\u0151 ciklusban a j v\u00e1ltoz\u00f3 indulna 1-t\u0151l, akkor pedig minden sor els\u0151 eleme, vagyis a teljes els\u0151 (0. index\u0171) oszlop maradna ki. Itt k\u00e9nytelenek vagyunk az els\u0151 minimumot \u00f6nmag\u00e1val is \u00f6sszehasonl\u00edtani, ami az\u00e9rt valljuk be, nem t\u00fal nagy vesztes\u00e9g. De ha nem \u00edgy oldod meg, akkor s\u00falyos hiba.<\/li>\n<\/ol>\n<h4>H\u00e1romdimenzi\u00f3s t\u00f6mb\u00f6k<\/h4>\n<p>T\u00f6bbdimenzi\u00f3s t\u00f6mb\u00f6ket 3 dimenzi\u00f3 felett nem igaz\u00e1n haszn\u00e1lunk. A 3. dimenzi\u00f3val m\u00e9g van \u00e9rtelme dolgozni, mondjuk t\u00e9rbeli koordin\u00e1t\u00e1k, vagy k\u00e9pfeldolgoz\u00e1s eset\u00e9n mondjuk egy RGB k\u00f3d t\u00e1rol\u00e1sa eset\u00e9n. Ebben az esetben formailag \u00edgy n\u00e9z ki a t\u00f6mb\u00fcnk:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\n\/\/ h\u00e1romdimenzi\u00f3s t\u00f6mb deklar\u00e1l\u00e1sa \u00e9s inicializ\u00e1l\u00e1sa\r\nint&#x5B;]&#x5B;]&#x5B;] tomb = new int&#x5B;4]&#x5B;5]&#x5B;2];\r\n\r\n\/\/ h\u00e1romdimenzi\u00f3s t\u00f6mb adott elem\u00e9nek kiv\u00e1laszt\u00e1sa\r\ntomb&#x5B;1]&#x5B;2]&#x5B;1]\r\n<\/pre>\n<p>Itt a 3. dimenzi\u00f3 mondjuk mint egyfajta magass\u00e1g \u00e9rtelmezhet\u0151 t\u00e9rbeli pontok t\u00e1rol\u00e1sa eset\u00e9n. Sz\u00ednk\u00f3dokn\u00e1l pedig a 3 sz\u00ednkomponens \u00e9rt\u00e9k\u00e9t t\u00e1rolhatjuk a t\u00f6mbben. Ezekben az esetekben a t\u00f6mb teljes bej\u00e1r\u00e1sa \u00e9rtelemszer\u0171en 3 ciklust jelent, de csak az els\u0151 sorbeli magass\u00e1gadatok bej\u00e1r\u00e1sa is k\u00e9t ciklust ig\u00e9nyel. Akkor van sz\u00fcks\u00e9g egy ciklusra, ha a 3 dimenzi\u00f3b\u00f3l 2 r\u00f6gz\u00edtett. P\u00e9ld\u00e1ul az els\u0151 sor m\u00e1sodik elem\u00e9hez tartoz\u00f3 pontok (a tomb[0][1] magass\u00e1goszlopa) bej\u00e1r\u00e1sa eset\u00e9n.<\/p>\n<h4>F\u0171r\u00e9szfogas t\u00f6mb\u00f6k<\/h4>\n<p>L\u00e1thattad, hogy a k\u00e9tdimenzi\u00f3s t\u00f6mb\u00f6k eset\u00e9n az oszlopok sz\u00e1ma minden esetben megegyezik. Ez azonban nem mindig van \u00edgy. Megadhat\u00f3 az is, hogy az egyes sorok v\u00e1ltoz\u00f3 (de megad\u00e1suk ut\u00e1n fix) hossz\u00faak legyenek. Ezt a szerkezetet f\u0171r\u00e9szfogas t\u00f6mbnek is szok\u00e1s nevezni. Ilyen szerkezetet nagyon speci\u00e1lis esetekben haszn\u00e1lunk, de a kezel\u00e9se a fentiek alapj\u00e1n meglehet\u0151sen egyszer\u0171. L\u00e1ssuk hogyan deklar\u00e1ljuk ezt:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\n\/\/ el\u0151sz\u00f6r csak a sorok sz\u00e1m\u00e1t adjuk meg\r\nint&#x5B;]&#x5B;] tomb = new int&#x5B;3]&#x5B;];\r\n\r\n\/\/ ezut\u00e1n haszn\u00e1lat el\u0151tt egyenk\u00e9nt adjuk meg a sorok m\u00e9reteit\r\n\r\ntomb&#x5B;0] = new int&#x5B;5];\r\ntomb&#x5B;1] = new int&#x5B;7];\r\ntomb&#x5B;2] = new int&#x5B;3];\r\n\r\n\/\/ t\u00f6lts\u00fck fel a t\u00f6mb\u00f6t a &#x5B;0;9] intervallumb\u00f3l\r\nfor( int i = 0; i &lt; tomb.length; i++ )\r\n{\r\n  for( int j = 0; j &lt; tomb&#x5B;i].length; j++ )\r\n  {\r\n    tomb&#x5B;i]&#x5B;j] = (int)(Math.random()*10);\r\n  }\r\n}\r\n\r\n\/\/ \u00edrjuk ki a t\u00f6mb\u00f6t\r\nfor( int i = 0; i &lt; tomb.length; i++ )\r\n{\r\n  for( int j = 0; j &lt; tomb&#x5B;i].length; j++ )\r\n  {\r\n    System.out.print(tomb&#x5B;i]&#x5B;j]+&quot; &quot;);\r\n  }\r\n  System.out.println();\r\n}\r\n<\/pre>\n<p>L\u00e1thatod, hogy a t\u00f6mb sorai nem egyforma hossz\u00faak. Itt csak arra kell vigy\u00e1zni, hogy direkt hozz\u00e1f\u00e9r\u00e9ssel soha ne hivatkozz olyan index\u0171 elemre, ami nem l\u00e9tezik. Nem \u00e9rtelmezhet\u0151 p\u00e9ld\u00e1ul a 4. oszlop, mivel a 3. sorban csak 3 oszlop tal\u00e1lhat\u00f3. De a t\u00f6mb bej\u00e1r\u00e1sa, minimum\/maximum keres\u00e9s, sor\u00f6sszeg, t\u00f6mb \u00f6sszeg, megsz\u00e1ml\u00e1l\u00e1sok, gond n\u00e9lk\u00fcl kivitelezhet\u0151k a fent kidolgozott p\u00e9ld\u00e1k alapj\u00e1n, de csak akkor, ha ezek nem egy oszlopra korl\u00e1toz\u00f3dnak. Csak akkor kell nagyon figyelni, ha csak oszlopban akarunk mozogni, mert tiszt\u00e1zni kell el\u0151re, l\u00e9tezik-e teljesen az adott oszlop, vagy valamelyik sorban lyukas. Ez a f\u0171r\u00e9szfogas szerkezet 3 \u00e9s t\u00f6bb dimenzi\u00f3ra is l\u00e9trehozhat\u00f3, de azzal m\u00e1r szinte csak elm\u00e9leti s\u00edkon kell sz\u00e1molni.<\/p>\n<h4>K\u00f6vetkez\u0151 lecke: <a title=\"Java programoz\u00e1s 18. \u2013 Adatbek\u00e9r\u00e9s\" href=\"http:\/\/www.webotlet.hu\/?p=629\">Adatbek\u00e9r\u00e9s<\/a><\/h4>\n","protected":false},"excerpt":{"rendered":"<p>T\u00f6bbdimenzi\u00f3s t\u00f6mb\u00f6k, avagy t\u00f6mb\u00f6k egy csokorban A t\u00f6mb, mint \u00f6sszetett adatt\u00edpus az el\u0151z\u0151 anyagokb\u00f3l m\u00e1r ismer\u0151s lehet. M\u00edg a t\u00f6mb\u00f6k egy adatsort tartalmaznak, a t\u00f6bbdimenzi\u00f3s t\u00f6mb\u00f6k pedig t\u00f6bbet. A t\u00f6bbdimenzi\u00f3s t\u00f6mb\u00f6k val\u00f3j\u00e1ban t\u00f6mb\u00f6k t\u00f6mbjei. A dimenzi\u00f3k sz\u00e1ma elm\u00e9letileg nincs korl\u00e1tozva, <a class=\"more-link\" href=\"https:\/\/www.webotlet.hu\/?p=587\">Tov\u00e1bb <span class=\"screen-reader-text\">  Java programoz\u00e1s 17. &#8211; T\u00f6bbdimenzi\u00f3s t\u00f6mb\u00f6k<\/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":[144,143,65,15],"class_list":["post-587","post","type-post","status-publish","format-standard","hentry","category-java-halado-leckek","tag-java_programozas","tag-programozas","tag-tobbdimenzios-tomb","tag-tomb"],"_links":{"self":[{"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=\/wp\/v2\/posts\/587","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=587"}],"version-history":[{"count":37,"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=\/wp\/v2\/posts\/587\/revisions"}],"predecessor-version":[{"id":1696,"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=\/wp\/v2\/posts\/587\/revisions\/1696"}],"wp:attachment":[{"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=587"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=587"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=587"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}