Это класс с методом buildList, который строит в
class Recursive
{
public static ArrayList<Integer> reversedList = new ArrayList<Integer>();
public static ArrayList<Integer> buildList(int n)//builds the arrayList based on integer. If the int is 5 then the contents are 1,2,3,4,5.
{
// write this in terms of a recursive call using a smaller n
ArrayList<Integer> tempList = null;
if (n <= 0) // The smallest list we can make
{
return new ArrayList<Integer>();
}
else // All other size lists are created here
{
tempList= buildList(n-1);
tempList.add(n);
}
return tempList;
}
Это проблемный метод. IKD почему он возвращает [], я думаю, что есть проходящая ошибка.
public static ArrayList<Integer> reverse(ArrayList<Integer> lst)//the problem method
{
if(lst.size()<=0) {
}
else {
reversedList.add(lst.remove(lst.size()-1));
reverse(lst);
}
return reversedList;
}
public static void main(String[] args)
{
ArrayList<Integer> lst = Recursive.buildList(5);
System.out.println(lst);
reverse(lst);
System.out.println(lst);
}
}
Обратный метод удаляет последний элемент lst и добавляет его в пустой reversedList. После первой итерации содержимое должно быть [5]. Второй [5,4] ... вплоть до [5,4,3,2,1]. Но так или иначе это заканчивается тем, что []. Таким образом, обратный метод должен печатать [5,4,3,2,1], а скорее печатать []. Я думаю, что это как-то связано с передачей reversedList между операторами if и else, но я не уверен.