2016-12-02 4 views
1

Я пытаюсь написать метод, который находит все нечетные целые числа из массива и возвращает новый массив с целыми числами.Как создать новый массив из другого рекурсивного массива

+1

Вы задумывались над созданием ArrayList (который вам не нужно определять размер) для добавления элементов в. Затем вы можете легко использовать метод 'toArray()', предоставляемый классом ArrayList, который позволит вам преобразовать из массива ArrayList в массив. – Jay

+2

@Jay Это звучит как раннее академическое упражнение, возможно, они не были введены в ArrayLists – JonK

+0

в вашей прогаме, можете ли вы использовать другие доступные в Java коллекции? Потому что вам нужно использовать концепцию «динамический массив» в файле filterOddHelp. в Java нет такой вещи, как «динамический массив», поэтому проще всего использовать ArrayList. Если ваше назначение использовать массив только тогда, существует решение с методом System.arraycopy для достижения функциональности «динамического массива». – Vadim

ответ

0

проблема заключается в том, что вы инициализируете свой возвращаемый массив с одинаковым размером входного массива x. int [] по умолчанию будет иметь значение 0.

Что вы должны сделать, это если вы найдете нечетное, а затем вычтите размер на единицу, а затем инициализируете массив, так что у вас не будет «пустых» ящиков, которые по умолчанию 0

-1

Когда вы ищете какой-то ответ, и вы не знаете точный размер, что это хорошая идея, чтобы использовать 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, когда вы не знаете, как большой массив вам понадобится.

+1

Я отказался, потому что я не чувствую, что в этом случае раздача готового рабочего кода - это правильная вещь. Это читается как вопрос о домашнем задании, поэтому ответ был бы более полезен, если бы он описал потенциальные решения проблемы, но не остановился на самом деле, разрешив его, чтобы у аськи была возможность выяснить это сами. Имейте в виду, что вы действительно можете работать с этим человеком через 5 лет (маловероятно, но все же) - вы хотите, чтобы они были хорошими программистами вместо того, чтобы просить о помощи в stackoverflow! – JonK

Смежные вопросы