gpt4 book ai didi

java - ArrayList 项索引不正确 : Reversing a ArrayList with Recursion

转载 作者:行者123 更新时间:2023-12-02 10:36:44 24 4
gpt4 key购买 nike

我正在解决一个小问题,使用递归来反转字符数组列表。我已经基本弄清楚了,但目前在通过索引检索项目时遇到一些问题。

我的功能如下:

    public static ArrayList<Character> reverseArray(ArrayList<Character> array){

if (array.size() == 1){
return array;
}

// Fetched the last item

ArrayList<Character> lastItem = new ArrayList<Character>();

System.out.println("Index: " + (array.size()-1));
System.out.println("Item at index: "+ (array.size()-1) + "is: " + array.get((array.size()-1)));
lastItem.add(array.get(array.size()-1));

// Remove the last item
array.remove(array.get(array.size()-1));

// Join all arrays until the last entry
lastItem.addAll(reverseArray(array));

return lastItem;

}

通过该函数运行以下数组列表:

    ArrayList<Character> test1 = new ArrayList<Character>();
test1.add('a');
test1.add('b');
test1.add('c');
test1.add('a');
test1.add('b');
test1.add('c');

控制台中的输出似乎是:[c, c, b, b, a, a]

我添加了一些控制台打印来查看发生了什么,在索引 5 处,它似乎拉出了索引 2 处的项目。因此,直到最后,它都会删除索引 5,然后是 2,然后是 3,然后是 1。将输入数组更改为不有重复的值使函数起作用。这似乎是具有多个相同字符的问题。

对于为什么会发生这种情况有什么想法吗?

最佳答案

您正在调用 remove 的重载版本,该版本将删除元素

当您删除c时,第三个元素将被删除。因此,在下一次递归调用时,最后一个元素 (c) 保留。

您需要按位置删除元素

array.remove(array.size() - 1);

关于java - ArrayList 项索引不正确 : Reversing a ArrayList with Recursion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53235991/

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