Я пытаюсь вплетать два одномерных массива в новый массив - PullRequest
0 голосов
/ 02 сентября 2018

Я пытаюсь взять два одномерных массива и сплести их в новый массив. Например

a = (1,2,3) & b = (44,55,66,77,88)

взяв эти два массива и сплетя их, получим

c = (1,44,2,55,3,66,77,88)

Я искренне верил, что решил это, но не могу понять, почему этот код выводит

c/interleave as 1,44,2,55,66,77,88,0

Код:

public static int[] interleave(int[] a, int[] b)
 {
  int [] interleave = new int [a.length + b.length];
  int j = 0, k = 0;
  for (int i = 0; i < (a.length + b.length);i++)
  {
     if (((i % 2 == 0) || (k >= b.length)) && (j < a.length))
     {
        interleave[i] = a[j];
        j++;
     }
     if (((i % 2 == 1) || (j >= a.length)) && (k < b.length))
     {
        interleave[i] = b[k];
        k++;
     }

1 Ответ

0 голосов
/ 02 сентября 2018

Вы проверяете b.length против k и a.length против j. Таким образом, когда k становится 3, ваш второй if заменит interleave[i] на b[k]. k и j должны быть переключены:

if (((i % 2 == 0) || (j >= b.length)) && (j < a.length))
 {                 //^^^ 
    interleave[i] = a[j];
    j++;
 }
 if (((i % 2 == 1) || (k >= a.length)) && (k < b.length))
 {                  //^^^
    interleave[i] = b[k];
    k++;
 }

Выход:

[1, 44, 2, 55, 3, 66, 77, 88]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...