Перебор массива через цикл в Java

Есть метод слияния массивов на Java:

public static int[] combineArrays(int[] a, int[] b) {
    int[] c = new int[a.length + b.length];
    for (int i = 0; i < a.length; i++) {
        c[i] = a[i];
    }
    
    int j = 0;
    for (j = a.length; i < c.length; i++) {
        c[i] = b[j];
        j++;
    }
    return c;
}

Если передать два массива например:

int[] mas1 =new int[]{1,2,3};
int[] mas2 =new int[]{4,5,6};

То ответ будет : 1,2,3,4,5,6

Вопрос: Скажите , после того , когда c[i] заполнится размером до 2 , что передается в j = a.length( текущая длинна от 0 до 2 ?) и во втором же цикле счетчик i начинается с 0 ? можно пожалуйста вот эти моменты подробнее пояснить. Спасибо.


Ответы (4 шт):

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

В данном случае, при массивах mas1 и mas2, a.length передает 3. Причина кроется в том, что length - это просто размер массива. В вашем примере, второй цикл начинается с 3 индекса (4 позиции).

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

В первом цикле вы заполняете новый массив c до длины массива a (последний индекс равен a.length-1). Во втором цикле вы начинаете с индекса a.length, таким образом не задев уже имеющихся в нём значений из массива a.

public static int[] combineArrays(int[] a, int[] b) {

    int[] c = new int[a.length + b.length];

    for (int i = 0; i < a.length; i++) {
        c[i] = a[i];
    }

    for (int j = a.length; j < c.length; j++) {
        c[i] = b[j];
    }

    return c;
}
→ Ссылка
Автор решения: Arty Morris

Можно использовать так

private double[] concatArray(double[] a, double[] b) {
if (a == null)
    return b;
if (b == null)
    return a;
double[] r = new double[a.length + b.length];
System.arraycopy(a, 0, r, 0, a.length);
System.arraycopy(b, 0, r, a.length, b.length);
return r;
}

Источник

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

Хм, а не проще

int[] result = Stream.concat(
Arrays.stream(a),
Arrays.stream(b))
.sort().toArray();

И у вас там ошибка. Замените на:

    for (int i = 0, j = a.length; i < b.length; i++, j++) {
        c[j] = b[i];
    }

Чтобы не путаться можно называть переменные чуть более очевидно :

int firstArrayIndex =...
→ Ссылка