gpt4 book ai didi

java - 相反的方法应该反向打印出 lst 。它会打印一个空的 arrayList。为什么会发生这种情况以及如何解决它?

转载 作者:行者123 更新时间:2023-12-02 09:22:48 26 4
gpt4 key购买 nike

这是带有 buildList 方法的类,用于构建 in

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;

}

这是有问题的方法。我不知道为什么它返回[],我认为存在传递错误。

    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);


}

}

reverse方法删除lst的最后一项并将其添加到空的reversedList中。第一次迭代后,内容应为 [5]。第二个 [5,4]...一直到 [5,4,3,2,1]。但不知怎的,它最终变成了[]。因此,反向方法应该打印出 [5,4,3,2,1],而不是打印 []。我认为这与在 if 和 else 语句之间传递 returnedList 有关,但我不确定。

最佳答案

您仅打印原始列表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
}

希望您觉得它有帮助。

关于java - 相反的方法应该反向打印出 lst 。它会打印一个空的 arrayList。为什么会发生这种情况以及如何解决它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58567434/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com