Перебор массива через цикл в 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 шт):
В данном случае, при массивах 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;
}
Можно использовать так
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;
}
Хм, а не проще
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 =...