Массив int(некорректный вывод)

Прошу помочь с кодом. Мне нужно реализовать добавление в массив чисел через метод (который сам должен сделать). Вроде всё получилось, но если я начинаю работу с пустым массивом, то первый элемент становится нулём. Как это поправить?

import java.util.Arrays;
    
public class program149 {
    
    public static int[] add(int[]a, int b) {
        int len = a.length;
        int newarr[] = new int[len + 1];
        for (int i = 0; i < len; i++) {
            newarr[i] = a[i];
            newarr[len] = b;
        }
        return newarr;
    }

    public static void main(String[] args) {
        int[] a = {};
        int[] b = add(a, 1); // [1]
        int[] c = add(b, 2); // [1, 2]
        int[] d = add(c, 3); // [1, 2, 3]
        System.out.println(Arrays.toString(d));
    }
}

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

Автор решения: Дмитрий

Циклы - хлам: работают медленнее, и запутаться легко. А если использовать System.arraycopy(), то и быстрее, и одновременно можно принимать в качестве второго аргумента произвольное количество интов, тогда еще круче получится))

import java.util.Arrays;

public class program149 {

    public static int[] add(int[] a, int ... b) {        
        int newarr[] = new int[a.length + b.length];
        System.arraycopy(a, 0, newarr, 0, a.length);
        System.arraycopy(b, 0, newarr, a.length, b.length);
        return newarr;
    }

    public static void main(String[] args) {
        int[] a = {};
        int[] b = add(a, 1); // [1]
        int[] c = add(b, 2); // [1, 2]
        int[] d = add(c, 3); // [1, 2, 3]
        System.out.println(Arrays.toString(d));
        int[] e = add(c, 4,5,6); // [1, 2, 3, 4, 5, 6]
        System.out.println(Arrays.toString(e));
    }
}

А вот так можно стримами (это медленнее работает), функционалка, как известно, славится лаконичностью:

public static int[] add(int[] a, int ... b) {        
    return Stream.of(a,b).flatMapToInt(array->Arrays.stream(array)).toArray();
}
→ Ссылка