цикл массива для группирования значений для общего

#java #arrays #for-loop

#java #массивы #для цикла

Вопрос:

Как я могу написать цикл for, который проходит через массив и разбивает его на группы по 6. Оттуда он должен добавить первую группу в arrNumbers, затем добавить вторую группу, но в обратном порядке, так { 6, 5, 4, 3, 2, 1 } в первую группу, которая является { 1, 2, 3, 4, 5, 6 } и затем третья группа не должна быть отменена, но затем, если есть другая группа из 6, набор должен быть отменен для добавления. Я не знаю, как это сделать. Любая помощь будет оценена. Ниже приведена моя попытка

 import java.util.Arrays;

public class arrayAdding{

     public static void main(String []args){
        int[] arrNumbers = new int[] { 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6 };
        int[] newArrNumbers = new int[6];
        
        for(int i  = 0; i < arrNumbers.length ; i  ){
            newArrNumbers[i < 6 ? i : (6 - (i % 6) - 1)]  = arrNumbers[i];
        }
        System.out.println(Arrays.toString(newArrNumbers));
     }
}
  

Фактический результат из моего кода:

 newArrNumbers = [13, 12, 11, 10, 9, 8]
  

Требуемый результат должен быть:

 newArrNumbers = [8, 9, 10, 11, 12, 13]
  

Комментарии:

1. Таким образом, четные группы не меняются местами, в то время как нечетные группы меняются местами? Группа 0 не отменяется, группа 1 отменяется, группа 2 не отменяется и так далее. Я прав?

2. Да, точно, я не знаю, как это реализовать

Ответ №1:

Вы можете думать как группа из 12 элементов и не менять местами первые 6 и менять местами следующие 6.

  • (i % 12) < 6 — Первая половина — i % 6
  • (i % 12) >= 6 — Вторая половина (обратная) — (6 - (i % 6) - 1)

Код:

 newArrNumbers[(i % 12) < 6 ? i % 6 : (6 - (i % 6) - 1)]  = arrNumbers[i];
  

Ответ №2:

Вы можете обратиться к нижеприведенному коду:

 import java.util.*;
  

ArrayAdding открытого класса {

 public static void main(String []args){
    Integer[] arrNumbers = new Integer[] { 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6 };
    int[] newArrNumbers = new int[6];
    List<List<Integer>> partitions = ArrayAdding.splitArray(arrNumbers);

    Iterator<List<Integer>> itr = partitions.iterator();
    while (itr.hasNext()) {
        List<Integer> next = itr.next();
        if (next.size() < 6 )
            itr.remove();
    }

    for(int i  = 0; i < partitions.size() ; i  ){
        if (i % 2 != 0) {
            Collections.reverse(partitions.get(i));
        }
    }

    for (List<Integer> partition : partitions) {
        for (int j = 0; j < 6; j  ) {
            newArrNumbers[j] = partition.get(j)   newArrNumbers[j];
        }
    }
    System.out.println(Arrays.toString(newArrNumbers));
}

private static List<List<Integer>> splitArray(Integer[] arrNumbers) {
    int partitionSize = 6;
    List<List<Integer>> partitions = new LinkedList<>();
    List<Integer> originalList = Arrays.asList(arrNumbers);
    for (int i = 0; i < originalList.size(); i  = partitionSize) {
        partitions.add(originalList.subList(i,
                Math.min(i   partitionSize, originalList.size())));
    }
    return partitions;
}}