#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;
}}