Java 如何从另一个递归数组创建新数组

Java 如何从另一个递归数组创建新数组,java,arrays,recursion,Java,Arrays,Recursion,我正在尝试编写一个方法,从一个数组中查找所有奇数整数,并返回一个包含该整数的新数组。问题是您正在以与输入x数组相同的大小初始化返回数组。int[]的默认值为0 你应该做的是,如果你找到一个奇数,然后用1减去大小,然后初始化数组,这样你就不会有默认为0的空箱子,当你搜索某种答案时,你不知道确切的大小。最好使用列表,例如ArrayList,这对你的情况有帮助: import java.util.ArrayList; import java.util.List; public class Main

我正在尝试编写一个方法,从一个数组中查找所有奇数整数,并返回一个包含该整数的新数组。

问题是您正在以与输入x数组相同的大小初始化返回数组。int[]的默认值为0


你应该做的是,如果你找到一个奇数,然后用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