Kezdőoldal » Számítástechnika » Programozás » Java metódus (? )

Java metódus (? )

Figyelt kérdés
A kérdésem az lenne, hogy java-ban hogyan változtatom meg egy változó értékét metódussal? C-ben ez pointerekkel (pointer volt az argumentum) volt megoldva, ami java-ban nincs.

2015. ápr. 16. 15:11
 1/10 anonim ***** válasza:
100%
Sehogy. A primitív típusok érték szerint adódnak át, minden más referencia szerint. Csomagold a változódat egy objektumba, azt add át, és az objektumon belüli változót (adattag) már módosíthatod. És persze visszatérsz az objektummal.
2015. ápr. 16. 15:15
Hasznos számodra ez a válasz?
 2/10 A kérdező kommentje:

A függvény így nézne ki:

public boolean moveBackwardsAndRight(ChessBoard b){

if(b.getItem( (pos.x+1) , (pos.y+1) ) != Const.FREE) { return false};

else {

pos.plusY(1);

pos.plusX(1);

return true;

}

A kérdésem az lenne, hogy ebbe hogyan lehetne beilleszteni, hogy megváltoztassa a ChessBoard (egyébként char[][]) osztály egyik elemét, ha feltétel megvan

2015. ápr. 16. 15:19
 3/10 anonim ***** válasza:
Sehogy. Java-ban csak érték szerinti átadás van, ami az objektumok esetében azt jelenti, hogy a pointer másolódik, ami az objektumra mutat, tehát ha bent megváltoztatod az argumentum értékét, az nem változtat kint semmit, de a benti pointer is ugyanarra az objektumra mutat, mint a kinti, tehát ha az objektum valamely mezőjét változtatod meg, akkor kint is nyilván megváltozik.
2015. ápr. 16. 15:28
Hasznos számodra ez a válasz?
 4/10 A kérdező kommentje:

Tehát azt mondod, hogy ha változtatok az argumentumban lévő osztály egyik értékén, akkor az kint is megváltozik?

Mivel az nem egy primitív típus

2015. ápr. 16. 15:32
 5/10 anonim ***** válasza:

"A kérdésem az lenne, hogy ebbe hogyan lehetne beilleszteni, hogy megváltoztassa a ChessBoard (egyébként char[][]) osztály egyik elemét, ha feltétel megvan"


Ugyanúgy, mint bárhol, egyedül, amit hiába csinálsz:


b = valami_más;


Mert kint továbbra is ugyanaz lesz az értéke.

2015. ápr. 16. 15:33
Hasznos számodra ez a válasz?
 6/10 anonim ***** válasza:

#1 vagyok


Megváltoztatni a ChessBoard egyik elemét úgy tudsz más metódusból, ahogy elmondtam és ahogy csinálnád is a fenti kódban:


....(ChessBoard b) {

b.getItem(...)

b.setItem(..., ...);

}


Nyilván kell lenni setItem-nek is a ChessBoard-ban.

2015. ápr. 16. 15:38
Hasznos számodra ez a válasz?
 7/10 anonim ***** válasza:
Igen, bármely adattagját változtatod az objektumnak, az kint is megváltozik, mert ugyanarról a példányról van szó, csak a benti "b" is egy mutató ugyanarra, meg a kinti változónév is, ezért nem tudod a kintinek az értékét lecserélni valami másra.
2015. ápr. 16. 15:40
Hasznos számodra ez a válasz?
 8/10 A kérdező kommentje:

Áh rendben, így már világos :)

Köszönöm szépen!

2015. ápr. 16. 15:41
 9/10 anonim ***** válasza:
100%

Nem csak a primitív típusok adódnak át érték szerint, hanem minden.

ChessBoard cb = new ChessBoard();

Ilyenkor a cb csak egy referencia lesz az objektumra.

Amikor átadod a metósudnak ez a referencia érték szerint adódik át viszont ugyan arra az objektumra fog hivatkozni.

2015. ápr. 16. 16:28
Hasznos számodra ez a válasz?
 10/10 anonim ***** válasza:

#1 vagyok


#9: Hopp, igazad van! :)

2015. ápr. 16. 16:32
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!