【问题标题】:How to create a new array from another array recursive如何从另一个数组递归创建新数组
【发布时间】:2016-12-02 15:40:15
【问题描述】:

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

【问题讨论】:

  • 您是否考虑过创建一个 ArrayList(您不必定义其大小)来添加元素。然后,您可以轻松使用 ArrayList 类提供的toArray() 方法,该方法允许您从 ArrayList 转换为数组。
  • @Jay 这听起来像是一个早期的学术练习,它们可能还没有被引入到 ArrayLists 中
  • 在您的程序中,您可以使用其他可用的 Java 集合吗?因为您需要在 filterOddHelp 中使用“动态数组”概念。 Java中没有“动态数组”这样的东西,所以最简单的方法是改用ArrayList。如果您只分配使用数组,那么可以使用 System.arraycopy 方法来实现“动态数组”功能。
  • ... 或者,如果您绝对需要在递归中使用数组,请在您的 filterOdd 函数中创建一次返回数组,作为输入 m 的副本,并且不要在每次迭代中重新创建它。如果值是奇数,则在每一步增加i,或者将其与最后一个(jth)元素交换,否则减少j。然后最后你需要根据最终的ij 值修剪你的数组。
  • @JonK 你是对的。我试图想办法在不泄露答案的情况下解释它,因为我认为这可能是一个有价值的学习练习!

标签: java arrays recursion


【解决方案1】:

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

你应该做的是,如果你找到一个奇数,然后将大小减一,然后初始化数组,这样你就不会有默认为 0 的“空”箱

【讨论】:

    【解决方案2】:

    当您正在搜索某种答案并且您不知道确切大小时,最好使用List,例如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;
        }
    }
    

    控制台:

    9
    7
    5
    3
    1
    

    当您不知道需要多大的数组时,考虑使用List

    【讨论】:

    • 我投了反对票,因为我不认为在这种情况下提供已完成的工作代码是正确的做法。这读起来像是一个家庭作业问题,所以如果它描述了问题的潜在解决方案,但没有真正解决它,以便提问者有机会自己弄清楚,那么答案会更有益。请记住,您实际上可能会在 5 年后与此人一起工作(不太可能但仍然如此) - 您希望他们成为优秀的程序员,而不是擅长在 stackoverflow 上寻求帮助!
    猜你喜欢
    • 1970-01-01
    • 2012-12-16
    • 2017-10-13
    • 2011-11-13
    • 2021-09-02
    • 2017-05-06
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多