Инициализация объекта Java

#java

#java

Вопрос:

не могу понять, как добраться до значений моего объекта. Например, в этой строке кода. Я получил объекты, например «Деньги», и при нажатии кнопки я хочу увеличить количество денег.

  package com.crelix.crelix;

public class MainHolder {

    int id;
    String name;
    int count;

    public void id(int id) {

    }

    public MainHolder(String name) {


    }


    public void count(int count) {

    }


    public static void main(String args[]) {

        MainHolder Money = new MainHolder("Money: ");
        MainHolder MoneyClicks = new MainHolder("Money Clicks: ");
        MainHolder Boxes = new MainHolder("Boxes: ");
        MainHolder BoxClicks = new MainHolder("Boxes Clicks: ");
        MainHolder BoxLevel = new MainHolder("Box Level: ");
        MainHolder PlayerLevel = new MainHolder("Player Level: ");
        MainHolder GarageLevel = new MainHolder("Garage Level: ");
        MainHolder GarageSlots = new MainHolder("Garage Slots: ");

        Money.id(1);
        Money.count(0);

        MoneyClicks.id(2);
        MoneyClicks.count(0);

        Boxes.id(3);
        Boxes.count(0);

        BoxClicks.id(4);
        BoxClicks.count(0);

        BoxLevel.id(5);
        BoxLevel.count(1);

        PlayerLevel.id(6);
        PlayerLevel.count(1);

        GarageLevel.id(7);
        GarageLevel.count(1);

        GarageSlots.id(8);
        GarageSlots.count(25);



    }
}
  

И я хочу увеличить значения, например, count.

В моем предыдущем коде я делал это следующим образом CarMain.main[0] = 1;

Теперь с этим кодом я не могу этого сделать.

И не могу сделать это как CarMain.Money.count =1;

Ответ №1:

Что ж, вы внедрили правильный метод для выполнения подсчета.

В принципе, каждый раз, когда вы вызываете, например Money.count(1) , вы можете иметь следующую реализацию в методе count:

 // This function will increment the count by the entered count variable.
public void function count(int count){
    this.count  = count;
}
  

Если вы хотите, чтобы переменная count всегда увеличивалась на 1, то вам не нужен параметр count. Вы можете вызвать метод без каких-либо аргументов, а затем увеличить значение на 1 внутри метода.

Ответ №2:

Я хотел бы начать с указания на то, что имена ваших переменных не соответствуют соглашениям об именовании Java, и это затрудняет чтение вашего кода для тех из нас, кто пытается вам помочь.

Далее, вопрос мне не совсем понятен, но звучит так, как будто вы хотите создать графический пользовательский интерфейс (GUI) с кнопкой, которая будет увеличивать количество a MainHolder при каждом нажатии на нее. Я также думаю, что вы застряли на том, как создать объект типа модели данных, который позволит вам хранить и изменять данные по мере необходимости.

Давайте начнем с MainHolder , которая, как я предполагаю, будет вашей моделью данных. Распространенный способ создания объекта модели данных — определить, какие private (см. Руководство по Java — Управление доступом к членам класса) поля вы хотите, чтобы он имел, и предоставить методы получения и / или установки для каждого поля, которые будут общедоступны для других классов (например, вашего GUI).

 public class MainHolder {

    private static int nextId = 1;
    private int id;
    private String name;
    private int count;

    public MainHolder(String name) {
        count = 0;
        this.name = name;
        id = nextId;
        nextId  ;
    }

    public void setCount(int count) {
        this.count = count;
    }

    public int getCount(){
        return count;
    }
}
  

Вы заметите, как конструктор инициализирует большинство внутренних полей и устанавливает для id объекта значение nextId , а затем увеличивает static nextId поле на единицу. Я предположил, что это тот тип поведения, который вы искали, основываясь на вашем вопросе и вашем коде.

Обратите также внимание, что предусмотрена простая пара методов getCount и setCount , которые разрешают доступ к count полю.

Теперь вы можете создать свой графический интерфейс и использовать свою модель данных. Я собираюсь предположить, что вы захотите следовать шаблону MVC (model view controller), поскольку это обычно считается лучшей практикой для приложений с графическим интерфейсом. Таким образом, вы, вероятно, создали бы экземпляр MainHolder в классе controller, затем передали бы свой контроллер вашему экземпляру GUI. Контроллер будет предоставлять методы бизнес-уровня — возможно, что-то вроде addMoney(int amt)

Внутри контроллера у вас было бы что-то похожее на это:

 public class Controller{
    private MainHolder money;
    ...

    public Controller(){
        money = new MainHolder("Money: ");
    }
    ...

    public addMoney(int amt){
        int amount = money.getCount()   amt;
        money.setCount(amount);
    }
    ...

    public static void main(String args[]) {
        Controller controller = new Controller();
        MyGui myGui = new MyGui(controller);
        //Invoke appropriate method(s) to show the GUI
        ...
  

Внутри вашего класса GUI у вас должен быть listenter, прикрепленный к вашей кнопке, который будет вызывать addMoney метод контроллера, например:

 addMoneyButton.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            controller.addMoney(1);
        }
    });
  

Я надеюсь, что это поможет вам двигаться в правильном направлении, удачи!

Ответ №3:

Попробуйте объявить переменную count как общедоступную или создать для нее метод