| | |
| 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 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 Bydlisko: Žilina, Pop... | Napísal XOLOO: 26.03.2016 17:56 | |
|
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 Bydlisko: Šurany | Napísal autor témy mmarekk11: 27.03.2016 13:30 | |
|
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 Bydlisko: Žilina, Pop... | Napísal XOLOO: 27.03.2016 16:55 | |
|
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 Bydlisko: Košice - ok... | Napísal focko: 28.03.2016 18:52 | |
|
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 Bydlisko: Žilina, Pop... | |
Registrovaný: 27.06.09 Prihlásený: 04.03.23 Príspevky: 332 Témy: 3 Bydlisko: Košice - ok... | Napísal focko: 28.03.2016 22:34 | |
|
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 |
---|
| dobre java navody a nova tema JAVA [ Choď na stránku: 1, 2 ] v Assembler, C, C++, Pascal, Java | 35 | 5424 | 09.03.2009 17:14 tlacitko Enter | | Rozdiel medzi Java Standard a Java EE v Assembler, C, C++, Pascal, Java | 1 | 837 | 02.04.2014 12:41 XOLOO | | textarea value v HTML, XHTML, XML, CSS | 5 | 477 | 26.10.2009 18:37 pilná lama glama | | vyprázdnenie value v JavaScript, VBScript, Ajax | 13 | 587 | 30.07.2009 9:30 Draex | | Option value v HTML, XHTML, XML, CSS | 7 | 545 | 28.03.2010 19:22 Ďuri | | SB Live Value v Zvuk | 4 | 925 | 01.10.2005 10:11 Lukas[CZE] | | odoslanie button value v JavaScript, VBScript, Ajax | 3 | 581 | 18.09.2009 14:02 pilná lama glama | | MySQL default value v Databázy | 3 | 715 | 30.05.2010 18:05 DARSON | | href value z iframe v JavaScript, VBScript, Ajax | 2 | 357 | 04.09.2012 13:20 neopagan | | zmena value v textfield v JavaScript, VBScript, Ajax | 10 | 608 | 04.10.2009 21:31 pilná lama glama | | value pri type file v HTML, XHTML, XML, CSS | 1 | 499 | 25.06.2007 7:03 zero0x | | Inputs value pomocou PHP v PHP, ASP | 2 | 249 | 27.06.2013 19:53 maťo* | | Best Value PC - do 550E [ Choď na stránku: 1, 2 ] v PC zostavy | 36 | 1223 | 07.07.2015 8:59 stewinko | | Genius SW-5.1 Value v Zvuk | 5 | 919 | 13.01.2009 23:28 wwwirko | | Creative SoundBlaster Audigy 2 Value v Zvuk | 12 | 1291 | 23.09.2005 17:24 BIO | | genius sound maker value 5.1 v Ovládače | 6 | 864 | 27.06.2008 13:46 Andres28791 |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|