Почему сообщение start выводится, а код не выполняется, хотя ошибки нет?
Почему сообщение start
выводится, а код не выполняется, хотя ошибки нет?
public int[] sortArrayByParityII(Integer[] nums) {
int[] resArr = new int[nums.length];
ArrayList<Integer> arrHAves = new ArrayList<>(Arrays.asList(nums));
boolean isHaveBol = false;
int a = 0;
int k = 0;
int w = 0;
System.out.println("Start");
for (int i = 0; i<nums.length; i++) {
if (nums[i] % 2 == 0) {
resArr[a] = nums[i];
arrHAves.remove(nums[i]);
a++;
int index = 0;
for (int ind = 0; ind < nums.length; ind++) {
if (nums[i] == ind) {
index = ind;
}
}
if (index == nums.length - 1) {
} else {
for (int l = 0; l < arrHAves.size(); l++) {
if (l % 2 != 0) {
isHaveBol = true;
break;
}
}
if (isHaveBol) {
for (int b = 0; k < nums.length ; b++) {
if (nums[k] % 2 != 0) {
resArr[a] = nums[b];
arrHAves.remove(nums[b]);
a++;
k++;
break;
}
}
}
}
}
}
return resArr;
}
Ответы (2 шт):
Можно сделать попроще (онлайн чек):
public static int[] sortArrayByParity(int[] nums) {
int odd = 1;
for (int even = 0; even < nums.length; even += 2) {
if (nums[even]%2==1) {
while (nums[odd]%2==1)
odd += 2;
int t = nums[odd];
nums[odd] = nums[even];
nums[even] = t;
}
}
return nums;
}
Для каждого чётного места, если стоит нечётное число, ищем первое неиспользованное чётное и обмениваем их местами.
Данный код выполняется, но в последнем вложенном цикле for (int b = 0; k < nums.length; b++)
возникает зависание, так как переменная k
может ни разу не измениться внутри цикла, так как для этого требуется, чтобы было выполнено условие if (nums[k] % 2 != 0)
.
Если задача состоит только в расстановке чисел по индексам в зависимости от их чётности, то достаточно было бы расставить числа по нужным индексам в результирующем массиве за один проход:
public static int[] sortArrayByParityII(Integer ... nums) {
int[] resArr = new int[nums.length];
int even = 0;
int odd = 1;
for (int i = 0; i < nums.length && (even < resArr.length || odd < resArr.length); i++) {
if (nums[i] % 2 == 0) {
resArr[even] = nums[i];
even += 2;
} else {
resArr[odd] = nums[i];
odd += 2;
}
}
return resArr;
}
Здесь предполагается, что входной массив nums
корректный, то есть, имеет чётную длину и содержит равное количество чётных и нечётных чисел.