gpt4 book ai didi

java - 使用递归从 Java 中的 ArrayList 和 ArrayList 中分离偶数和奇数索引

转载 作者:行者123 更新时间:2023-12-04 10:34:25 24 4
gpt4 key购买 nike

我正在尝试将偶数和奇数索引从 java 中的 ArrayList 作为分配的一部分。它必须是一个递归方法。这是我尝试过的;;

public ArrayList<Integer> toOddList(ArrayList<Integer> input) {
ArrayList<Integer> copiedList = (ArrayList<Integer>) input.clone();
ArrayList<Integer> oddList = new ArrayList<Integer>();
ArrayList<Integer> evenList = new ArrayList<Integer>();
int index = (copiedList.size() - 1); // Sets index to the max size of ArrayList - 1
if (index <= 0) {
return oddList;
}
if ((index % 2) == 0) {
evenList.add(copiedList.get(index)); // Adds indexed number to even Arraylist
copiedList.remove(index); // Removes index from copiedList
copiedList = toOddList(copiedList); // Calls function again
} else {
oddList.add(copiedList.get(index)); // Adds indexed number to odd Arraylist
copiedList.remove(index); // Removes index from copied List
copiedList = toOddList(copiedList); // Call method again
} return oddList;
}

如果有任何其他方法可以为此使用递归,或者分别使用偶数和奇数的两种方法,我们将不胜感激。

最佳答案

我借用了 Jarvis 使用索引而不是克隆输入数组的想法。我认为这里的目的是使我们已经到达列表末尾的基本情况,如果没有,我们将当前元素添加到正确的列表中,然后在列表的其余部分调用我们自己,注意增加索引并切换当前列表的位置和甲板上的位置。那么方法就变成了:

//assumes all lists initialized by caller
public void splitList(ArrayList<Integer> input, int index, ArrayList<Integer> current, ArrayList<Integer> onDeck) {
if (index >= input.size()) { //base case
return;
} else { //add the current element and call us on the rest of the list
current.add(input.get(index));
splitList(input, index + 1, onDeck, current); //note toggling output list and advancing index
}
}

一旦输入列表初始化并且odds和evens包含新构建的空数组列表,它就会被调用,如下所示:
splitList(splitThis, 0, evens, odds);//start with evens because 0 is even

修订:
我注意到将“列表的其余部分”设为子列表是可以不用担心索引的,而且更自然一些。我也概括为任何类型的列表。因此:
//assumes all lists initialized by caller
public void splitList(List<Integer> input, List<Integer> current, List<Integer> onDeck) {
if (input.size() == 0) { //base case
return;
} else { //add the current element and call us on the rest of the list
current.add(input.get(0));
splitList(input.subList(1, input.size()), onDeck, current); //note toggling output list and call on rest of list, if any
}
}

并且调用简化为:
splitList(splitThis, evens, odds);//start with evens because 0 is even

关于java - 使用递归从 Java 中的 ArrayList 和 ArrayList 中分离偶数和奇数索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60255537/

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