Java 如何从另一个递归数组创建新数组
我正在尝试编写一个方法,从一个数组中查找所有奇数整数,并返回一个包含该整数的新数组。问题是您正在以与输入x数组相同的大小初始化返回数组。int[]的默认值为0Java 如何从另一个递归数组创建新数组,java,arrays,recursion,Java,Arrays,Recursion,我正在尝试编写一个方法,从一个数组中查找所有奇数整数,并返回一个包含该整数的新数组。问题是您正在以与输入x数组相同的大小初始化返回数组。int[]的默认值为0 你应该做的是,如果你找到一个奇数,然后用1减去大小,然后初始化数组,这样你就不会有默认为0的空箱子,当你搜索某种答案时,你不知道确切的大小。最好使用列表,例如ArrayList,这对你的情况有帮助: import java.util.ArrayList; import java.util.List; public class Main
你应该做的是,如果你找到一个奇数,然后用1减去大小,然后初始化数组,这样你就不会有默认为0的空箱子,当你搜索某种答案时,你不知道确切的大小。最好使用列表,例如ArrayList,这对你的情况有帮助:
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] a = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
List<Integer> result = filterOdd(a);
for (Integer i : result) {
System.out.println(i);
}
}
public static List<Integer> filterOdd(int[] m) {
return filterOddHelp(m, 0, m.length - 1);
}
public static List<Integer> filterOddHelp(int[] x, int i, int j) {
List<Integer> returnArray = new ArrayList<Integer>();
if (i <= j) {
returnArray = filterOddHelp(x, i + 1, j);
if (x[i] % 2 != 0) {
returnArray.add(x[i]);
}
}
return returnArray;
}
}
当您不知道需要多大的数组时,可以考虑使用列表。您是否考虑过创建一个ArrayList,而不必定义添加元素的大小。然后,您可以轻松地使用ArrayList类提供的toArray方法,该方法将允许您从ArrayList转换为数组。@Jay这听起来像是早期的学术练习,它们可能还没有被介绍到ArrayList中。在您的程序中,您可以使用Java集合中的其他可用方法吗?因为您需要在FilterAddHelp中使用动态数组概念。Java中没有动态数组,所以最简单的方法是使用ArrayList。如果您的任务是仅使用阵列,则有一个解决方案,即使用System.arraycopy方法来实现动态阵列功能。。。。或者,如果您确实需要在递归中使用数组,请在filterOdd函数中创建一次返回数组,作为输入m的副本,并且不要在每次迭代中都重新创建它。在每一步中,如果值为奇数,则增加i,或者将其与最后一个第j个元素交换,否则减少j。最后,您需要根据最终的i或j值修剪数组。@JonK您是对的。我试图找出一种解释它的方法,但没有给出答案,因为我认为这可能是一个有价值的学习练习!我投了反对票,因为我觉得在这种情况下,发布完成的工作代码不是正确的做法。这读起来像是一个家庭作业问题,因此,如果答案描述了问题的潜在解决方案,但没有实际解决问题,那么答案会更有用,这样提问者就有机会自己解决问题。记住,你可能会在5年内与此人共事,但这不太可能,但你仍然希望他们成为优秀的程序员,而不是擅长在stackoverflow上寻求帮助!
9
7
5
3
1