Я пишу программу, которая манипулирует ArrayList с помощью ListIterator без использования каких-либо методов ArrayList. В этом случае ArrayList должен вести себя как набор.
Мой метод add проходит по ArrayList и сравнивает каждый элемент с числом, которое нужно добавить, чтобы избежать повторов. OurSet()
является конструктором класса. Я также переопределяю метод toString для печати с использованием методов ListIterator.
Когда я тестировал эти два метода, оказалось, что метод add на самом деле ничего не добавляет (или оператор печати этого не показывает). Вывод с использованием основного метода ниже пуст, и я не совсем понимаю, почему. Я проследил код несколько раз и поместил операторы печати в методы, чтобы убедиться, что они выполняются в каждой строке. В методе toString он никогда не входит в цикл while. Код ниже, и любая помощь приветствуется!
OurSet()
{
// list is the ArrayList object, it was defined earlier and now instantiated
list = new ArrayList();
// iter is the ListIterator object, it was defined earlier and now instantiated
iter = list.listIterator();
}
public void add(int x)
{
while(iter.hasNext())
{
int item = (Integer) iter.next();
if(item == x)
break;
}
iter.add(new Integer(x));
}
public String toString()
{
String set = "";
while(iter.hasNext())
{
int item = (Integer) iter.next();
set += item + " ";
}
return set;
}
Вот мой основной метод.
public static void main(String args[])
{
OurSet set = new OurSet();
set.add(50);
System.out.println(set);
}
set += item + " ";
избегайте конкатенации строк в цикле. Вместо этого используйтеStringBuilder
и его методappend
. Пример: stackoverflow.com/a/1532483/1393766, вопрос на эту тему: stackoverflow.com/ вопросы/14927630/ - person Pshemo   schedule 08.12.2015