Stránka: 1 z 1
| [ Príspevkov: 7 ] | |
Autor | Správa |
---|
Registrovaný: 26.11.07 Prihlásený: 12.04.19 Príspevky: 143 Témy: 25 | 25 Bydlisko: Šurany |
Zdravim, chcem sa opytat na predavanie arguemntov do metody. Preco sa zmeni hodnota prvkov pola mojeP po tomto prikaze "mojeP2 = doublePole1(mojeP);", ked Java by mala pracovat len s hodnotami prvkov toho pola? Pri pouziti metody doublePole2 je vsetko OK, tak by to ale malo byt aj pri doublePole1 metode. Kód: public class MyClass{
public static void main(String []args){ int mojeP[] = {1,2,3}; int mojeP2[] = new int[3]; zobrazPole(mojeP); // vypise 1,2,3 mojeP2 = doublePole1(mojeP); zobrazPole(mojeP); // vypise 2,4,6 zobrazPole(mojeP2); } static int[] doublePole1(int[] pole){ for (int i=0; i < pole.length; i++){ pole[i] *= 2; } return pole; } static int[] doublePole2(int[] pole){ int[] pole2 = new int[pole.length]; for (int i=0; i < pole.length; i++){ pole2[i] = 2*pole[i]; } return pole2; } static void zobrazPole(int[] pole){ for (int i=0; i < pole.length; i++){ System.out.print(pole[i] + ", "); } System.out.println(); } } Skusil som si vytvorit aj jednoduchsi program na skusku a tuto funguje vsetko tak ako ma - x nenadobudne novu hodnotu pokial nepriradim vysledok metody do x. Kód: public class MyClass{
public static void main(String []args){ int x = 10; doubleNum(x); zobraz(x); // vypise 10 } static int doubleNum(int y){ return y *= 2; } static void zobraz(int y){ System.out.println(y); } }
_________________ MB:MSI Z77A-G43 CPU:Intel Core i5-3570K 3,4Ghz CPU Cooler:Silentium PC - Fortis 2 XE1226 GPU:Gainward GTX970 Phantom RAM:Kingston 16GB DDR3 PSU:EVGA 500B Case:Cooler Master Elite 372 SSD:Samsung 860 EVO 250 GB HDD1:WD Caviar Blue 1TB HDD2:Seagate Barracuda 500GB 7200rpm |
|
Registrovaný: 05.04.11 Príspevky: 1693 Témy: 50 | 50 Bydlisko: Žilina, Pop... |
Ved to je v pohode nie ? V jave mozes vytvorit smernik, poslat ho do funkcie a mozes zmenit data na ktore ukazuje, co je tvoj pripad, kedze pole je len struktura plna smernikov. Vec v tvojom kode je taka, ze doublePole2 vrati referenciu na nove pole v pamati, ktore tam vytvoris. Tuto referenciu nasledne v main priradzujes do premennej mojeP2 a vyspises ju ako poslednu. Vsetko teda funguje presne tak ako fungovat ma Ak si to potrebujes poriadne pozriet skus si to krokovat v nejakom ladiacom nastroji tvojho vyvojoveho prostredia
_________________ rMBP 13 2015 iPhone 7
|
|
Registrovaný: 26.11.07 Prihlásený: 12.04.19 Príspevky: 143 Témy: 25 | 25 Bydlisko: Šurany |
Len nechapem, preco v druhom priklade to funguje odlisne od doublePole1. Premenna x vstupuje ako argument do funkcie a predsa sa neprepise. A to pouzivam lokalnu premennu y ako vstupny argument a aj vystupny. Nepouzivam napr. return y2.
_________________ MB:MSI Z77A-G43 CPU:Intel Core i5-3570K 3,4Ghz CPU Cooler:Silentium PC - Fortis 2 XE1226 GPU:Gainward GTX970 Phantom RAM:Kingston 16GB DDR3 PSU:EVGA 500B Case:Cooler Master Elite 372 SSD:Samsung 860 EVO 250 GB HDD1:WD Caviar Blue 1TB HDD2:Seagate Barracuda 500GB 7200rpm |
|
Registrovaný: 05.04.11 Príspevky: 1693 Témy: 50 | 50 Bydlisko: Žilina, Pop... |
No ved to je vsetko spravne nie ? Ako som ti povedal v doublePole1 ty prechadzas po referenciach na hodnoty prvkov pola a upravujes ich hodnoty. V druhom priklade sa ti pri volani tej metody skopiruje na poziciu v pamati ukazovanu premennou y hodnota ktora je v pamati na pozici udavanou smernikom x. Kedze ty menis hodnotu na pozici y tak sa ti x nikdy nezmeni, fungovalo by to iba v pripade ak by java bola pass by reference, co nie je.
_________________ rMBP 13 2015 iPhone 7
|
|
Registrovaný: 27.06.09 Prihlásený: 04.03.23 Príspevky: 332 Témy: 3 | 3 Bydlisko: Košice - ok... |
Pole je objekt. Objekty su v Jave predavane metodam referenciou (by-reference). doublePole1() dostava odkaz na pole a priamo ho upravuje. DoublePole2() prekopiruje predane pole a potom ho po uprave vrati. DoubleNum() ma parameter typu int co je premenna primitivneho datoveho typu a tie sa predavaju hodnotou (by-value). Primitivne datove typy, kt. sa predavaju hodnotou: byte, short, int, long, float, double, char, boolean.
_________________ GitHub: mfocko | mfocko.xyz OSs: archLinux + fedora (+ Windows 10 Pro Insider Preview, only if needed) Server: archLinux [nginx + Docker (GitLab) + SSH/SFTP + local mirror (FTP/rsync - archLinux, Fedora) + samba + transmission] |
|
Registrovaný: 05.04.11 Príspevky: 1693 Témy: 50 | 50 Bydlisko: Žilina, Pop... | |
Registrovaný: 27.06.09 Prihlásený: 04.03.23 Príspevky: 332 Témy: 3 | 3 Bydlisko: Košice - ok... |
Citácia: Objekty su v Jave predavane metodam referenciou. To je pravda, nebolo to myslené tak, že môžeme zmeniť, na ktorý objekt premenná odkazuje, ale ten objekt, na ktorý sme dostali odkaz upravovať môžeme a to s dôsledkami aj po ukončení metódy.
_________________ GitHub: mfocko | mfocko.xyz OSs: archLinux + fedora (+ Windows 10 Pro Insider Preview, only if needed) Server: archLinux [nginx + Docker (GitLab) + SSH/SFTP + local mirror (FTP/rsync - archLinux, Fedora) + samba + transmission] |
|
Stránka: 1 z 1
| [ Príspevkov: 7 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| [ Choď na stránku: 1, 2 ] v Assembler, C, C++, Pascal, Java | 35 | 5562 | 09.03.2009 17:14 tlacitko Enter | | v Assembler, C, C++, Pascal, Java | 1 | 907 | 02.04.2014 12:41 XOLOO | | v HTML, XHTML, XML, CSS | 5 | 518 | 26.10.2009 18:37 pilná lama glama | | v JavaScript, VBScript, Ajax | 13 | 632 | 30.07.2009 9:30 Draex | | v HTML, XHTML, XML, CSS | 7 | 585 | 28.03.2010 19:22 Ďuri | | v Zvuk | 4 | 973 | 01.10.2005 10:11 Lukas[CZE] | | v Databázy | 3 | 754 | 30.05.2010 18:05 DARSON | | v JavaScript, VBScript, Ajax | 3 | 612 | 18.09.2009 14:02 pilná lama glama | | v JavaScript, VBScript, Ajax | 2 | 392 | 04.09.2012 13:20 neopagan | | v JavaScript, VBScript, Ajax | 10 | 652 | 04.10.2009 21:31 pilná lama glama | | v HTML, XHTML, XML, CSS | 1 | 525 | 25.06.2007 7:03 zero0x | | v PHP, ASP | 2 | 279 | 27.06.2013 19:53 maťo* | | [ Choď na stránku: 1, 2 ] v PC zostavy | 36 | 1327 | 07.07.2015 8:59 stewinko | | v Zvuk | 5 | 975 | 13.01.2009 23:28 wwwirko | | v Zvuk | 12 | 1329 | 23.09.2005 17:24 BIO | | v JavaScript, VBScript, Ajax | 1 | 341 | 01.11.2013 9:05 Unlink |
|