Вернуть массив, который содержит только нечетные целые числа

Итак, у меня есть проблема, когда при задании Array Arr возвращаем Array, который содержит только нечетные целые числа в исходном порядке из arr.

Мой код:

public int [] youMakeMeOdd(int [] arr)
{
   int[] odds;
   odds = new int[arr.length];
   for(int i = 0; i < arr.length; i++)
   {
      if(arr[i] % 2 != 0)
      {
         odds[i] = arr[i];
      }
   }
   return odds;
}

Несколько тестеров:

Ожидаемое...........................................................Бежать:

youMakeMeOdd ({1,2,3}) → {1, 3}..................... {1, 0, 3}

youMakeMeOdd ({2,1,3,5,7}) → {1, 3, 5, 7}....... {0, 1, 3, 5, 7}

youMakeMeOdd ({2,4,6,8}) → {}........................ {0, 0, 0, 0}

,

Я не могу понять, как поставить пробел вместо 0. Помощь оценена, спасибо:)

4 ответа

Решение

Выходной массив инициализируется до размера входного массива. Я предполагаю, что это Java-код, по умолчанию элементы массива инициализируются нулями. Поэтому всякий раз, когда условие if пропускает i-ю позицию, показывается значение по умолчанию (ноль).

public int[] youMakeMeOdd(int [] arr) {
   List<Integer> odds = new ArrayList<Integer>();
   for(int i = 0; i < arr.length; i++)
   {
      if(arr[i] % 2 != 0)
      {
         odds.add(arr[i]);
      }
   }
   return convertIntegers(odds);
}

public static int[] convertIntegers(List<Integer> integers)
{
    int[] ret = new int[integers.size()];
    Iterator<Integer> iterator = integers.iterator();
    for (int i = 0; i < ret.length; i++)
    {
        ret[i] = iterator.next().intValue();
    }
    return ret;
}
var result = input.Select(a=>a % 2 != 0 ? a : 0).ToArray()

Ты можешь использовать linq легко, в основном вы используете исходный массив, а затем использовать Select выбрать либо само значение массива, либо 0, если оно четное, а затем преобразовать в array с помощью ToArray метод.

У вас может быть цикл до вычисления, где вы просто увеличиваете счетчик, а затем распределяете шансы:

int counter = 0;
for (int i = 0; i < arr.length; i++)
{
    if (arr[i] % 2 != 0)
    {
        counter ++;
    }
}
odds = new int[counter];

Я бы использовал ArrayList. Похоже, ваши проблемы заключаются в том, что массивы являются неизменяемыми, поэтому вы автоматически заполняете свой массив кучей ненужных нулей. ArrayLists могут изменять размеры, поэтому вам не нужно иметь 0.

Вы можете посмотреть их здесь: http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html

Убедитесь, что вы импортировали пакет утилит.

 import java.util.*;



public ArrayList<Integer>  youMakeMeOdd(int [] arr)
{

Вам необходимо указать тип, который вы хотите сохранить в угловых скобках. Поскольку int является примитивом, вам нужно использовать класс Integer

   ArrayList<Integer> odds;
   odds = new ArrayList<>();
   for(int i = 0; i < arr.length; i++)
   {
      if(arr[i] % 2 != 0)
      {

Метод add добавляет целое число в конец

         odds.add(new Integer(arr[i]));
      }
   }
   return odds;
}
Другие вопросы по тегам