Java ArrayList Создание, редактирование и удаление - PullRequest
0 голосов
/ 01 февраля 2012

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

public void RemoveFromAnimalList(Animal A) {
    Iterator<Animal> i = AnimalList.iterator();
    while (i.hasNext()) {
        if (A == i.next()) {
            i.remove();
        }
    }
}   

public boolean AddNewAnimalList(Animal A) {
    ListIterator litr = AnimalList.listIterator();
    Animal B = null;
    while (litr.hasNext()) {
        B = (Animal) litr.next();

            litr.add(A);
            return true;

    }
    return false;
}

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

public void FirstBirth() {
    TheXYAxisControl XYSave = null;
    int X = 0;
    int Y = 0;
    for (Animal A : AnimalList) {
        if (A.Type.equals("Empty")) {

            X = A.XAxis;
            Y = A.YAxis;
            XYSave = new TheXYAxisControl(X, Y);
            TheXYaxisArrayList.add(XYSave);

        }
    }
    Random RandomNumberGen = new Random();

    for (int s = 0; s < 3; s++) {

        int RandomNumberGenerator = RandomNumberGen.nextInt(TheXYaxisArrayList.size());

        Animal NewAnimal = new Animal(0, "Male", 0, TheXYaxisArrayList.get(RandomNumberGenerator).getX(), TheXYaxisArrayList.get(RandomNumberGenerator).getY(), 0);
        RemoveFromAnimalList(AnimalList.get(RandomNumberGenerator));
        AddNewAnimalList(NewAnimal);
        RemoveFromOtherList(TheXYaxisArrayList.get(RandomNumberGenerator));
    }

    int RandomNumberGenerator = RandomNumberGen.nextInt(TheXYaxisArrayList.size());
    Animal NewAnimal = new Animal(0, "Female", 0,  TheXYaxisArrayList.get(RandomNumberGenerator).getX(),    TheXYaxisArrayList.get(RandomNumberGenerator).getY(), 0);
    RemoveFromAnimalList(AnimalList.get(RandomNumberGenerator));
    AddNewAnimalList(NewAnimal);
    RemoveFromOtherList(TheXYaxisArrayList.get(RandomNumberGenerator));

}

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

Ответы [ 2 ]

1 голос
/ 01 февраля 2012

Вы должны действительно использовать дженерики Java в своей Коллекции, Списке, Итераторе, ListIterator и т. Д. И избегать приведения.

Также вы сравниваете со знаком == здесь:

if (A == i.next())

Что просто сравнивает 2 ссылки. Измените это на:

if (A.equals(i.next()))
0 голосов
/ 01 февраля 2012

Сначала несколько советов по поводу появления кода в Java

  • Методы должны начинаться с маленькой буквы
  • Переменные должны начинаться с маленькой буквы

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

Оператор ==, используемый в типе объекта, сравнивает экземпляр.Другими словами, это сравнивает ссылку на память, которой назначен объект.

Если мы хотим сравнить объект с равным содержанием, мы должны использовать метод equals (Object object)

Поэтому замените if (A == i.next()) на if (A.equals(i.next())).

Кроме того, хорошей практикой является сравнение константы со значением, поэтому вместо A.Type.equals("Empty") должно быть "Empty".equals(A.Type).Эта практика может уменьшить нежелательные исключения NullPointerException в вашем коде.

...