Java, Андроид, setter/getter

192
19 апреля 2017, 11:36

Добрый день, понемногу начинаю изучать Java (с андроидом), естественно нужен практикум, так вот, решил написать простенькую программу, в которой есть две кнопки и целочисленная переменная.

Две кнопки "bHP" и "bDHP" повышают и понижают нашу переменную, для этого я реализовал два класса: один, "Main Activity", отображает Текст (в моем случае переменную), и содержит в себе методы кнопок, второй же хранит в себе ту самую переменную.

В нем я реализовал методы "сеттер" и "геттер". Проблема в том, что все работает, за малым исключением - при нажатии кнопки, насколько я понял, происходит задержка ввиду того, что сначала происходит передача данных переменной; в общем, насколько я понял, "Геттер" я неправильно сделал, на большее не хватает мозгов (из литературы Читаю Сиерра,и Шилда).

Стыдно писать такое, но еще постыднее не знать, простите за неудобство.

Вот код:

private int money;
Health heal =  new Health();
int j = heal.getHP();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    if (savedInstanceState != null) {
        money = savedInstanceState.getInt("money", money);
    }
    money();
    healView();
      }
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    savedInstanceState.putInt("money", money);
}
public void onMon(View v) {
    int min = 100;
    int max = 150;
    Random r = new Random();
    int money1 = r.nextInt(max - min + 1) + min;
    money = money + money1;
    TextView moneyView = (TextView) findViewById(R.id.money_view);
    moneyView.setText(String.format("%08d%n", money));
}
public void money() {
    TextView moneyView = (TextView) findViewById(R.id.money_view);
    moneyView.setText(String.format("%08d%n", money));
}
public void healView (){
    int j = heal.getHP();
    TextView HealthView = (TextView) findViewById(R.id.Health_view);
    HealthView.setText(String.valueOf(j));}
public void bHP (View view) {
    int j = heal.getHP();
    heal.setHP(10);
    TextView HealthView = (TextView) findViewById(R.id.Health_view);
    HealthView.setText(String.valueOf(j));}
public void bDHP (View view) {
    int j = heal.getHP();
    heal.setHP(-10);
    TextView HealthView = (TextView) findViewById(R.id.Health_view);
    HealthView.setText(String.valueOf(j));}
}

Класс Health

public class Health {
    private int HP;
    public int setHP (int newHP) {
        HP=HP+newHP;
        return newHP;
    }
    public int getHP() {
        return this.HP;
    }
}

Если можно ,важно не то что сделать.а лучше объяснить или жать ссылку на годную книгу ресурс,но от примера не откажусь тоже,благодарен заранее.

Answer 1

Вероятно оно работает не так как вы хотите потому что вы сначала берете значение переменной(int j = heal.getHP();), затем изменяете ее значение, а затем выводите значение j(то, что взяли до изменения). Переместите строку int j = heal.getHP(); ниже в обоих методах(bHP и bDHP(ужасные, кстати, названия)) и скорее всего все будет нормально

Answer 2

Обычно в классах, типа entity сеттеры и геттеры реализуют просто как

public class Health {
  private int HP;
  public int getHP() {
      return HP;
  }
  public void setHP(int HP) {
     this.HP = HP;
  }
}

А уже где-то в логике делают с ними что хотят

READ ALSO
CuncurrentModificationException

CuncurrentModificationException

Добрый день, при работе с javanio возникает CuncurrentModificationException, вроде стараюсь использовать iterator, и удалять элементы, но всеравно, при одновременном...

225
Зачем нужен finally?

Зачем нужен finally?

Допустим есть такой код

306
Создание второго PopupMenu

Создание второго PopupMenu

Есть приложение использованием карт googlemaps, в нем есть вызов popupmenu по нажатию кнопки в верхнем правом углу приложенияТеперь появилась необходимость...

210
Интерфейсы в Java

Интерфейсы в Java

Есть два интерфейса:

325