Zmiana wartości zmiennej w innej klasie

0

Witam ! Mam problem otóż zrobiłem zmienną moneyOnCard w klasie Values i chciałbym zmienić jej wartość w klasie Bank o pole edittext po kliknięciu przycisku button ale zmienia się tylko wartość obiektu w klasie Bank , a wartość zmiennej w klasie Values pozostaje taka sama.
Klasa Values:

public class Values {
static public int money = 100;
static public int moneyOnCard = 100;
static public int credit = moneyOnCard * 3;
}

Klasa Bank

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bank);
final TextView textView = (TextView) findViewById(R.id.textView22);
final EditText editText = (EditText) findViewById(R.id.editText);
Button button = (Button) findViewById(R.id.button);
TextView textView1 = (TextView) findViewById(R.id.textView27);
final TextView textView2 = (TextView) findViewById(R.id.textView29);

    final Values values = new Values();
    textView.setText("" + values.credit);
    textView1.setText("" + values.money);
    textView2.setText("" + values.moneyOnCard);

// final int i = i(moneyOnCard, debt);

    //final int a =  i();
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
                final int debt = Integer.parseInt(editText.getText().toString());
                values.moneyOnCard += debt;
                textView2.setText("" + values.moneyOnCard);





        }

    });
}
0

Już tłumaczyliśmy w poprzednim wątku jak to zrobić. Zadeklaruj zmienną values jako pole klasy:

class Bank {
    Values values;

    public void onCreate(Bundle savedInstanceState) {
        values = new Values();

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                values.moneyOnCard += debt;
            }
        });
    }
}
0

@Adrian K: zostaw na chwile klepanie kodu i spróbuj zrozumieć czym sie różni OBIEKT od KLASY.

0
Haskell napisał(a):

Już tłumaczyliśmy w poprzednim wątku jak to zrobić. Zadeklaruj zmienną values jako pole klasy:

class Bank {
    Values values;

    public void onCreate(Bundle savedInstanceState) {
        values = new Values();

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                values.moneyOnCard += debt;
            }
        });
    }
}

Przecież klasa Values ma pola statyczne - przynajmniej widzę że tak zrobił

0

No zrobił statycznie, a potem stworzył obiekt i chce modyfikować pola statyczne? Tylko po co?

0

Przecież klasa Values ma pola statyczne - przynajmniej widzę że tak zrobił

Rzeczywiście ma statyczne pola, nie zauważyłem. W takim wypadku powinno śmigać, ponieważ wartość pola statycznego jest przechowywana poza obiektem.

Adrian K napisał(a):

zmienia się tylko wartość obiektu w klasie Bank , a wartość zmiennej w klasie Values pozostaje taka sama.

W jaki sposób to sprawdzasz, w którym miejscu pozostaje taka sama?

0

Coś mi się zdaje, że próba modyfikacji wartości pól statycznych przez obiekt powinna wygenerować co najmniej ostrzeżenie

0
Haskell napisał(a):

Przecież klasa Values ma pola statyczne - przynajmniej widzę że tak zrobił

Rzeczywiście ma statyczne pola, nie zauważyłem. W takim wypadku powinno śmigać, ponieważ wartość pola statycznego jest przechowywana poza obiektem.

Adrian K napisał(a):

zmienia się tylko wartość obiektu w klasie Bank , a wartość zmiennej w klasie Values pozostaje taka sama.

W jaki sposób to sprawdzasz, w którym miejscu pozostaje taka sama?
Wywołuję zmienną w innej klasie

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