Metoda nie zwraca argumentu

Metoda nie zwraca argumentu
klaptoczb
  • Rejestracja:około 8 lat
  • Ostatnio:prawie 8 lat
  • Postów:8
0

Witam,
Mam kolejny problem natury teoretycznej. Poniżej przedstawiam 2 proste kody, pod nimi rozwinę o co mi chodzi:

Program 1

Kopiuj
public class Test1{
  public static void main(String[] args){
    
    Test_1 ob = new Test_1();
    ob.i = 5;
    ob.j = 10;
    
    ob.put();
    ob.get();
  }
}

public class Test_1{
  public int i, j;
  
  public void put(){
    i = i + j;
    j = -j;
  }
  
  public void get(){
    System.out.println(i);
    System.out.println(j);
  }
}

Program 2

Kopiuj
public class Test1{
  public static void main(String[] args){
    
    Test_1 ob = new Test_1();
   
    ob.put(5, 10);
    ob.get();
  }
}

public class Test_1{
  public int i, j;
  
  public void put(int i, int j){
    i = i + j;
    j = -j;
  }
  
  public void get(){
    System.out.println(i);
    System.out.println(j);
  }
}

Program 1 wyświetla liczby z uwzględnieniem metody put, a więc 15, -10. Natomiast program 2 wyświetla tylko 0, 0.

Bardzo proszę jeszcze o wyjaśnienie pojęcia referencji obiektu w sposób obrazowy.

Dzięki za pomoc!

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
4

W kodzie

Kopiuj
  public void put(int i, int j){
    i = i + j;
    j = -j;
  }

zmienne i oraz j są zmiennymi lokalnymi metody put, a nie polami klasy.
zamień ten kod na

Kopiuj
  public void put(int i, int j){
   this i = i + j;
   this.j = -j;
  }

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
AT
Albo możesz zmienić nazwy zmiennych które są przekazywane do metody ale bardziej stosuje się this. Tak jak @bogdans napisal
grzesiek51114
grzesiek51114
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 4 lata
  • Postów:2442
0

Dlatego warto używać this, jeżeli nie wszędzie to przynajmniej w takich wypadkach. Wtedy nie miałbyś takich problemów.

klaptoczb
  • Rejestracja:około 8 lat
  • Ostatnio:prawie 8 lat
  • Postów:8
0

Ehh no pewnie, nie pomyślałem. Sorry.

Dzięki za pomoc i pozdrawiam.

dawciobiel
  • Rejestracja:około 21 lat
  • Ostatnio:7 miesięcy
  • Postów:58
0

Do wnętrza metody jako parametry przekazywane są wartości typów prostych.
Druga sprawa, że nie tworzy się kodu tak jak ty to napisałeś, że gdzieś tam lokalne zmienne w metodzie main, potem przekazywane argumenty do metody, potem modyfikacja tych argumentów w ciele metody, i liczyć na końcu, że w metodzie **main **zostaną one zmodyfikowane. Takie tworzenie kodu jest bardzo mało czytelne.
Od tego mogą być pola w klasie aby w nich trzymać wartości które mają być widoczne w całej klasie. Ewentualnie można przekazywać parametry do metody, ale potem metoda niech zwróci wartości argumentu/ów i należy je wtedy z metody odebrać.
Poza tym zainteresuj się również metodami i polami typu static. Czasami mogą być przydatne (do odpowiednich zastosowań).

A w ogóle to starasz się za bardzo myśleć i programować strukturalnie zamiast obiektowo.

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.