Java: объединить 2 массива в третий массив, используя первые 3 целых числа из первого массива, а затем 3 целых числа из второго - PullRequest
0 голосов
/ 02 октября 2018

У меня есть 3 массива A, B и C. A и B имеют размер 6, а C имеет размер 12. Я должен объединить A и B в C, но используя первые 3 целых числа A, затем первое3 целых числа из B, затем следующие 3 целых числа из A и, наконец, последние 3 целых числа из B. Например: int A [] = {1,2,3,7,8,9}, B [] = {4,5,6,10,11,12} и заполнение C с помощью C [] = {1,2,3,4,5,6,7,8,9,10,11,12}

Вотмой код пока:

   public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int[] A = new int[6];
    int[] B = new int[6];
    int[] C = new int[12];

    int count = 0;

    for (int i = 0; i < 6; i++) {
        System.out.println("Array A: ");
        A[i]=sc.nextInt();
        System.out.println("Array B: ");
        B[i]=sc.nextInt();
    }

    System.out.println("");
    System.out.print("|");
    for (int i = 0; i < 6; i++) {
        System.out.print(A[i]+"|");
    }
    System.out.println("");
    System.out.print("|");
    for (int i = 0; i < 6; i++) {
        System.out.print(B[i]+"|");
    }

    while(count < 3){
    count++;
    {

Я действительно потерян с этим

Ответы [ 3 ]

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

Это относительно простая проблема, которую можно решить несколькими способами.Проще всего было бы, так как это статический пример, который вы привели, сделать что-то вроде

    c[0] = a[0];
    c[1] = a[1];
    c[2] = a[2];
    c[3] = b[0];
         .
         .
         .
    c[11] = b[5]

Это не очень хорошо масштабируется и его сложно поддерживать, но технически выполняет то, что вы просите.

Далее я бы просто посмотрел на петли.В предыдущей версии этого поста я не включал их, поскольку видел другие ответы с ними, но с тех пор добавил это, поскольку я думал, что они могут быть улучшены:

    //  Using loops     
    final int[] c = new int[12];
    for (int i = 0; i < 3; ++i) {
        c[i] = a[i];
        c[i + 3] = b[i];
        c[i + 6] = a[i + 3];
        c[i + 9] = b[i + 3];
    }

Это также очень просто иэффективный.Нам нужно всего 3 итерации цикла, чтобы покрыть обе половины массива, используя смещения, чтобы избежать необходимости создавать несколько циклов for для каждой части.Знания для этого вида просты приходят через опыт, поэтому я бы порекомендовал проработать еще несколько примеров.

Далее мы рассмотрим еще несколько забавных вариантов.Если вы не знакомы с Java API, я бы порекомендовал сначала поискать в Google различные вещи, такие как «java copy часть массива» или «java вставка массива в другой массив».

Такие поиски приводят к таким сообщениям, как:

Раздел копирования Java массива

Вставка массива в другой массив

Как использовать subList ()

Оттуда вы можете составить достаточно четко определенный ответ, такой как:

    //  Using System::arraycopy<T>(T[], int, T[], int, int), where T is the array-type.
    final int[] c = new int[12];
    System.arraycopy(a, 0, c, 0, 3);
    System.arraycopy(b, 0, c, 3, 3);
    System.arraycopy(a, 3, c, 6, 3);
    System.arraycopy(b, 3, c, 9, 3);

Что, вероятно, достаточно для большинства ваших потребностей.

Но, пройдя этот процесс, я узнал еще один способ сделать это с потоками!

    // Using java.util.stream
    final List<Integer> l_a = Arrays.stream(a).boxed().collect(Collectors.toList());
    final List<Integer> l_b = Arrays.stream(b).boxed().collect(Collectors.toList());

    final List<Integer> l_c = new ArrayList<Integer>() {{
        addAll(l_a.subList(0, 3));
        addAll(l_b.subList(0, 3));
        addAll(l_a.subList(3, 6));
        addAll(l_b.subList(3, 6));
    }};

    final int[] c = l_c.stream().mapToInt(i -> i).toArray();

И хотя этот последний пример, возможно, менее изящен, чем второй, проходящий через процессисследования проблемы и возможных решений научили меня кое-чему, что я могу теперь нести с собой в будущем.

Надеюсь, это поможет!

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

Вот пример кода, который решит вашу проблему:

int[] a = {1,2,3,7,8,9};
int[] b =  {4,5,6,10,11,12};
int[] c = new int[12];
for(int x = 0; x < c.length; x++) {
    if(x <= 2) {
       c[x] = a[x];
       }
    else if(x >= 3 && x<=5) {
            c[x] = b[x-3];
        }
    else if (x >= 6 && x <= 8) {
        c[x] = a[x -3];
        }
    else if(x>=6 && x<=11) {
        c[x] = b[x -6];

        }
    }
System.out.println(Arrays.toString(c));

Мы можем перебирать массив до тех пор, пока x <= 2, чтобы получить первые три индекса массива.Затем мы можем перебрать первые три индекса массива b, если x равен> = 3 && <= 5. Затем мы можем перебрать последние три значения a, а затем последние три значения b.Мы должны быть уверены, что выполнили «b [x-6]», потому что x будет явно больше, чем номер индекса, который мы имеем в массиве b.Вывод будет следующим: </p>

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
0 голосов
/ 02 октября 2018
int[] A = new int[]{1,2,3,7,8,9};
int[] B = new int[]{4,5,6,10,11,12};
int[] C = new int[12];

int aIndex= 0;
int bIndex= 0;
for(int i=0; i<C.length; i++) {
    if((i >= 0 && i < 3) || (i >= 6 && i < 9))
        C[i] = A[aIndex++];
    else
        C[i] = B[bIndex++];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...