Как метод узнает, над каким объектом работать? - PullRequest
0 голосов
/ 20 июня 2019

Я не уверен, правильно ли я это формулирую, но я не совсем понимаю, как метод может определить, над каким объектом он работает. Или еще один способ перефразировать это, как вы можете указать метод для работы с определенным объектом?

Например, если я создаю два объекта, которые работают с каким-то массивом. Допустим, obj1 и obj2. Если я тогда реализую какой-то метод add (), который добавит какое-то значение в массив. Как можно отличить obj1.add (значение E) от obj2.add (значение E).

Я пытался создать массив, но проблема в том, что obj1.add () и obj2.add () будут редактировать один и тот же массив, и я хочу, чтобы они работали отдельно. В конструкторе он дает массиву размер.

class Example{
    int arr[];
    Example(int a) {
       int size = a;
       arr = new int[a];
    }

    add(int value) {
       // adds some value to the array
    }

    public static void main(String[] args) {
       Example obj1 = new Example(5);
       Example obj2 = new Example(10);

       obj1.add(1);
       obj2.add(2);
    }
}

Можно ли создавать разные объекты, которые будут работать на своем собственном массиве? Я в замешательстве, потому что add всегда изменяет arr, а есть только один массив.

Ответы [ 3 ]

0 голосов
/ 20 июня 2019

Я думаю, это легко сделать.Вы можете поддерживать массивы в двух разных объектах, как показано ниже:

class Example{
    int arr[];
    Example(int a)
    {
       int size = a;
       this.arr= new int[a];
    }

    void add(int value)
    {
       // adds some value to the array
       //your logic to insert values in the array
    }

    public static void main(String args[])
    {
       Example obj1 = new Example(5);
       Example obj2 = new Example(10);

       obj1.add(1);
       obj2.add(2);
       obj1.add(3);
       obj2.add(4);
       for(int i=0;i<obj1.arr.length;i++){ //obj1.arr is used to access the array of that object
         System.out.println(obj1.arr[i]); //just for printing purpose
       }
       for(int j=0;j<obj2.arr.length;j++){
         System.out.println(obj2.arr[j]); //just for printing purpose
       }

    }
}

В приведенном выше коде вы можете использовать ключевое слово this с массивом (this.arr), чтобы поддерживать массивы в разныхобъекты по-разному.

Надеюсь, это поможет вам ..

0 голосов
/ 20 июня 2019

`открытый класс Example {int arr [];int currentElementsInArray = 0; // это количество элементов, находящихся в данный момент в массиве

Example(int a) {
   int size = a;
   arr = new int[a];
}

public void add(int value) {
   // adds some value to the array
   this.arr[this.currentElementsInArray++]= value; /*this will add the incoming element to the next
    vacant position of the array*/
}

public static void main(String[] args) {
   Example obj1 = new Example(5);
   Example obj2 = new Example(10);

   obj1.add(1);
   obj1.add(1);
   obj1.add(5);

   obj2.add(2);
   obj2.add(4);
   obj2.add(22);

   //prints the elements in the first array

   for(int i=0 ; i < obj1.currentElementsInArray ; i++){
   System.out.println(obj1.arr[i]);
   }

   //prints the elements in the second array

    for(int j=0 ; j < obj2.currentElementsInArray ; j++){
   System.out.println(obj2.arr[j]);
   }

}

} `

Запустите это.Два массива будут созданы отдельно для двух объектов.

0 голосов
/ 20 июня 2019

Итак, это настоящий вопрос для начинающих, но я постараюсь объяснить его настолько просто, насколько это возможно, так как это может быть трудно обернуть, когда вы начинаете.

Когда вы делаете

   Example obj1 = new Example(5);
   Example obj2 = new Example(10);

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

Вы можете видеть Объект в вашей оперативной памяти как дом на улице.

   Example Benny = new Example(5);
   Example Jacob = new Example(10);

Улица теперь имеет два дома. Бенни и Джейкоб.

Номер дома Бенни 105
Номер дома Иакова 42

Их дома были построены точно так же. Разница лишь в том, что Бенни может принять 5 гостей, а Джейкоб может принять 10 гостей.

Когда приходит такси, чтобы добавить гостя, он получает команду, добавляет гостя на улицу № 105. Такси едет на улицу № 105, игнорирует все дома, не являющиеся номером 105, и добавляет гостя в этот дом. .

Затем он возвращается к диспетчеру и получает команду, добавляет гостя на улицу № 42. Затем он едет на улицу № 42, добавляет гостя в этот дом.

В связи с тем, что у них разные адреса, никогда не происходит путаницы в отношении того, какие гости добавлены в какой дом. Дома не разделяют гостевые места в этой настройке.

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

schematic describing what happens* * 1030

Надеюсь, это немного поможет вам понять, как это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...