• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

przekazywanie argumentów do funkcji w Javie

0 głosów
954 wizyt
pytanie zadane 1 lipca 2020 w Java przez kasia7777 Nowicjusz (160 p.)

Witam :)

Mam chyba niezbyt mądre pytanie, ale niestety na razie słabo znam Javę.

W Javie przy przekazywaniu argumentów do funkcji typy proste są przekazywane przez wartość, a obiekty - przez referencję. Jak można zwrócić z funkcji więcej, niż 1 zmienną typu prostego, jeśli tylko jedną mogę zwrócić z tej funkcji (jako wartość funkcji). Czy istnieje jakiś sposób przekazania drugiej wartości?

 

int fun(int a) {
   a = 10;
   int b = 5;
   return b;
}
..................

int z = 2;
int x = 20;
z = fun(x);

Po wywołaniu funkcji z powinno mieć wartość 5, a x wartość 10.

Dziękuję za pomoc.

2
komentarz 1 lipca 2020 przez Paweł Nąckiewicz Nałogowiec (48,990 p.)

możesz takie coś osiągnąć stosując obiekty. Tzn stworzysz obiekt 

class Numbers {
   int a;
   int b;
}

i w twojej funkcji wywoływać nowy obiekt klasy Numbers. 

Numbers myFunction(args) {
   //jakas logika
   return new Numbers()
}

 

komentarz 1 lipca 2020 przez kasia7777 Nowicjusz (160 p.)
Dzięki za odpowiedź. :)
komentarz 1 lipca 2020 przez Wiciorny Ekspert (282,600 p.)

@pawi125, po co dla typów prostych zwracać obiekt :)... marnowanie złożoności 

The abstract class Number is the superclass of platform classes representing numeric values that are convertible to the primitive types byte, double, float, int, long, and short. The specific semantics of the conversion from the numeric value of a particular

komentarz 1 lipca 2020 przez mbabane Szeryf (79,260 p.)

Wiciorny

To nie o klasę Number chodzi (chociaż też początkowo się zdziwiłem, że robi new Number()).

2
komentarz 2 lipca 2020 przez Paweł Nąckiewicz Nałogowiec (48,990 p.)
Nie bawiłem się już długo w jave i faktycznie nazwa mojej przykładowej klasy nie była trafna. Grunt że wiadomo o co chodzi :)
komentarz 2 sierpnia 2020 przez kasia7777 Nowicjusz (160 p.)

@Paweł Nąckiewicz, cześć smiley mam jeszcze jedno pytanie. Gdy przekazuję do funkcji jako argument obiekt klasy napisanej przez siebie, to po zakończeniu działania funkcji zmiany dokonane w obiekcie pozostają:

class JakasKlasa {
   double d;
   String str;
}
 
... 

void funkcja(JakasKlasa jk)
{
   jk.d = 5.5;
   jk.str = "aaa";
}

Natomiast w przypadku użycia klasy wbudowanej np Integer przy przypisaniu jej nowej wartości zmiana nie jest zapamiętywana. Prawdopodobnie dlatego, że przy takim przypisaniu uruchamiany jest konstruktor, który zmiennej typu Integer przypisuje nowy adres. Jak w takim przypadku przypisać nową wartość zmiennej typu Integer, aby zmiana została zapamiętana i aby ta zmienna była przekazywana jako argument do funkcji? 

void inna_funkcja(Integer i) {
   i = 10;
}

wywołanie funkcji w kodzie:

Integer a = new Integer(7);
inna_funkcja(a);
System.out.println(a);

Przy wypisaniu wartości otrzymujemy nadal liczbę 7.

Czy da się zmienić wartość takiej liczby typu Integer podając ją jako argument funkcji?

komentarz 24 października 2020 przez Oscar Nałogowiec (29,360 p.)

Obiektowe odpowiedniki typów prostych są "inmutable", tzn obiekty tych typów nie mogą zmienić wartości.

W funkcji

void inna_funkcja(Integer i) {
   i = 10;
}

instrukcja i = 10 to taki skrótowy zapis

i = new Integer(10);

czyli zmienia to jedynie lokalną referencje.

Potrzebne byłoby coś w stylu:

i.setValue(10;

ale te klasy nie posiadają metod do ustawiania wartości.

 

PS. sorki, że odpowiadam na dość stary post, ale brakowało odpowiedzi na ostatnie pytania.

1 odpowiedź

+1 głos
odpowiedź 1 lipca 2020 przez mbabane Szeryf (79,260 p.)

Jak można zwrócić z funkcji więcej, niż 1 zmienną typu prostego

Nie da się, dlatego m.in. nazywa się je typami prostymi.

Poczytaj o klasach, wtedy będziesz mógł zwróć, upraszczając, wiele typów prostych w ramach jednego obiektu. 

komentarz 2 lipca 2020 przez Wiciorny Ekspert (282,600 p.)
tablicą typu prostego :D , no ale to masło maślane bo generalnie to i tak 1- zmienna tylko innego typu

Podobne pytania

0 głosów
2 odpowiedzi 1,410 wizyt
pytanie zadane 7 listopada 2017 w C i C++ przez antek782 Początkujący (490 p.)
+1 głos
2 odpowiedzi 495 wizyt
+2 głosów
1 odpowiedź 269 wizyt
pytanie zadane 12 listopada 2022 w Python przez niezalogowany

93,695 zapytań

142,612 odpowiedzi

323,223 komentarzy

63,225 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...