Вернуть массив, который содержит только нечетные целые числа
Итак, у меня есть проблема, когда при задании 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;
}