modyfikacja argumentow funkcji

modyfikacja argumentow funkcji
  • Rejestracja: dni
  • Ostatnio: dni
0

Chciałbym się dowiedzieć jak modyfikować argumenty funkcji w funkcji którą je przyjmuje.
W c++ wystarczyło dać referencje do zmiennej i już po problemie. W javie jako, że ich nie ma nie wiem jak rozwiązać problem.

przykład:

public static void f(int a)
{
a++;
}

public static void main(String[] args)
{
int a = 0;
f(a);
System.out.print(a);
}

To oczywiście wypisze 0. Jak ma wyglądać funkcja f żeby wypisywało 1?

Wibowit
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: XML Hills
0

Musisz stworzyć obiekt z polem typu int i przekazać referencję do tego obiektu. W Javie nie da się przekazywać referencji do prymitywów, nie można też zmieniać (ani nawet odczytywać) wartości zmiennych w innej ramce stosu niż aktualna.

A więc, podsumowując, zrób np klasę Holder:

Kopiuj
class Holder<T> {
  private T value;
  // gettery, settery, konstruktory
}

I wtedy możesz stworzyć klasę Holder<Integer>. Ewentualnie zrób klasę:

Kopiuj
class IntHolder {
  private int value;
  // getttery, settery, konstruktory
}

To będzie miało mniejszy narzut w ogólności.

W przypadku obiektów wykorzystywanych lokalnie, JVM odpali swoje optymalizacje jak np usuwanie autoboxingu, dewirtualizację, Escape Analysis, itp itd i nie powinno być wtedy różnic w wydajności pomiędzy Holder<Integer> i IntHolder.

bogdans
  • Rejestracja: dni
  • Ostatnio: dni
0

A nie możesz zwracać zmodyfikowanej wartości?

Kopiuj
public static int f(int a)
{
    a++;
    return a;
}

public static void main(String[] args)
{
    int a = 0;
    a = f(a);
    System.out.print(a);
}
Kandif
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 231
0

TO się w tym przypadku mija z celem bo w C++ za pomocą jednej funkcji możesz zmienić wartość wszystkim parametrom a przypisanie jest dość rozległe w porównaniu do wywołania samej funkcji ^^.

kult
  • Rejestracja: dni
  • Ostatnio: dni
0

W c++ wystarczyło dać referencje do zmiennej i już po problemie.
To powoduje wiele problemów :)

bogdans
  • Rejestracja: dni
  • Ostatnio: dni
0

Java jest obiektowa. Jeśli potrzebujesz funkcji, która zmienia wiele parametrów, to są one chyba powiązane. Tworzysz zatem klasę, w której te parametry są polami, tworzysz obiekt, a do funkcji przekazujesz referencję do obiektu.

adf88
  • Rejestracja: dni
  • Ostatnio: dni
0
Urso_niezalogowany napisał(a):

Chciałbym się dowiedzieć jak modyfikować argumenty funkcji w funkcji którą je przyjmuje.
To jest Java, nie C++. W Java nie ma referencji do prymitywów i nie powinieneś takich referencji symulować.

Jak rozwiązać problem? No właśnie, jaki problem? Bo na razie konkretnego problemu nie przedstawiłeś. Powiedziałeś tylko, że w C++ z tym problemem poraziłbyś sobie referencjami.

Wibowit
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: XML Hills
0

Referencje są, ale tylko do obiektów.

Edit:
No właśnie : P

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.