Объекты в массиве

 
 
 
Сообщения:12
Добрый день. Помогите пожалуйста разобраться с объектами в массиве.

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

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


public static void main (String Args[]){

        Abstrakt a = new ALGRapoport();
        Abstrakt b = new ALGFalse();
        Abstrakt c = new ALGTrue();

        ArrayList t = new ArrayList();
        t.add(a);
        t.add(b);
        t.add(c);

        for (int i = 0; i < t.size() - 1; i++){
            for (int j = i + 1; j < t.size(); j++){

                Object x1 = t.get(i);
                Object x2 = t.get(j);

                for (int k = 0; k < 1000; k++){
                    if (x1.isTurn()==true&&b.isTurn()==true){
                        x1.setX(4, true);
                        x2.setX(4, true);
                    }
                    else if (a.isTurn()==false&&b.isTurn()==true){
                        x1.setX(6, true);
                        x2.setX(0, false);
                    }
                    else if (a.isTurn()==true&&b.isTurn()==false){
                        x1.setX(0, false);
                        x2.setX(6, true);
                    }
                    else {
                        x1.setX(2, false);
                        x2.setX(2, false);
                    }
                }
                t.add(i, x1);
                t.add(j, x2);
            }
        }
        System.out.println("Алгоритм " + a.getName() + " набрал " + a.getX() + " очков");
        System.out.println("Алгоритм " + b.getName() + " набрал " + b.getX() + " очков");
        System.out.println("Алгоритм " + c.getName() + " набрал " + c.getX() + " очков");
    }



В общем вопрос: Как правильно вынуть объект из массива, поработать с ним и вернуть на прежнее место?
 
 
Сообщения:34
Object x1 = t.get(i);
Object x2 = t.get(j);


Замените тип ссылок с Object на Abstrakt.
 
 
Сообщения:1209
метод get не удаляет объект из списка, поэтому и добавлять его обратно не нужно.
Изменен:12 янв 2017 11:13
 
 
Сообщения:12
Бакуард:
Замените тип ссылок с Object на Abstrakt.


Выдает ошибку: Incompatible types

masyan:
метод get не удаляет объект из списка, поэтому и добавлять его обратно не нужно.


Ход мышления был следующим: методом get создаем копию объекта, работаем с ней, а потом копию ставим в массив на место исходного объекта, исходный объект выкидываем.

Вообще меня больше устроила бы возможность как-то вызывать методы прямо у объектов массива, не доставая их оттуда. Что-то по типу

t.get(i).isTurn()


Но оно так не работает. Скорее всего как-то так можно, но мне не хватает знаний, как это правильно реализовать.
 
 
Сообщения:1209
  • ArrayList это не массив. Массив Abstrakt[]
  • если есть общий класс, то сделайте абстрактный метод в нем isTurn(), в наследуемых классах реализуйте этот метод (если у них разная реализация, иначе реализуйте в родительском классе). И сделать список ArrayList<Abstrakt> t = new ArrayList(). Тогда будет возвращатся определенный класс при вызове get(index)
  • Quote:
    Ход мышления был следующим: методом get создаем копию объекта, работаем с ней, а потом копию ставим в массив на место исходного объекта, исходный объект выкидываем.

    возвращается ссылка на объект
  • почитайте основы
Изменен:12 янв 2017 12:15
 
 
Сообщения:12
Спасибо, получилось.

Это оказалось ненужным
  t.add(i, x1);
                t.add(j, x2);


Код:

Abstrakt x1 = t.get(i);


ставит ссылку на тот же объект, который лежит в массиве, а не создает новый объект. Я правильно понял?
 
 
Сообщения:1209
AVKel:

Abstrakt x1 = t.get(i);


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


правильно
 
Модераторы:frymock
Сейчас эту тему просматривают:Нет