Metoda nie zwraca argumentu

0

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

Program 1

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

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!

4

W kodzie

  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

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

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

0

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

Dzięki za pomoc i pozdrawiam.

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1