Обратный метод должен распечатать lst в обратном порядке. Вместо этого он печатает пустой arrayList. Почему это происходит и как мне это исправить? - PullRequest
0 голосов
/ 26 октября 2019

Это класс с методом 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, но я не уверен.

1 Ответ

1 голос
/ 26 октября 2019

Вы печатаете только оригинальный список lst , который теперь пуст, поскольку программа удалила все элементы.

Необходимо присвоить lst новой ссылке на объектвозвращается из функции, как lst = reverse (lst);

ИЛИ вы можете использовать System.out.println (reversedList)

    public static void main(String[] args)
    {
        ArrayList<Integer> lst = Recursive.buildList(5);
        System.out.println(lst);
        lst = reverse(lst);                   ////update lst reference

        System.out.println(lst);
        System.out.println(reversedList);    //// OR print reversedList directly 
    }

Надеюсь, вы найдете это полезным.

...