Почему сообщение 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 шт):

Автор решения: MBo

Можно сделать попроще (онлайн чек):

  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;
    }

Для каждого чётного места, если стоит нечётное число, ищем первое неиспользованное чётное и обмениваем их местами.

→ Ссылка
Автор решения: Nowhere Man

Данный код выполняется, но в последнем вложенном цикле 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 корректный, то есть, имеет чётную длину и содержит равное количество чётных и нечётных чисел.

→ Ссылка