Как добавить значения массива после превышения определенной длины в Java

#java #arrays #loops

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

Вопрос:

Я пытаюсь разработать наилучший способ добавления значений массива, когда они превышают определенную длину. Программа позволит пользователю вводить значения в массив. Как только пользователь вводит количество чисел (может быть столько, сколько они хотят). Числа не должны превышать 6 столбцов, и если они есть, их следует добавлять справа налево от массива. Смотрите ниже

12 чисел, введенных пользователем:

 arrNumbers = new int[] { 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6};
  

Должен быть создан новый массив, который будет выглядеть следующим образом:

 newArrNumbers = int [2, 4, 6, 8, 10, 12]
  

В результате получается всего 6 слотов.

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

 if (arrNumbers.length > 6)
  

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

1. Как вы собираетесь суммировать числа? Я не следую логике, которую вы используете для перехода от arrNumbers к newArrNumbers. Как только вы проясните эту логику, я смогу реализовать код.

2. «если они это сделают, они должны быть добавлены справа налево от массива», можете ли вы объяснить, что это значит? если arrNumbers = new int[] { 1, 2, 3, 4, 5, 6, 1, 2, 3}; , каков ваш ожидаемый результат? и что, если arrNumbers = new int[] { 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6,1,2,3}; ?

Ответ №1:

Я думаю, что вы ищете это

 int[] arrNumbers = new int[] {1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6};
int[] res = new int[6];

// iterate over the initial array and chunk it. 6 will be our chunk per requirements.
for (int i = 0; i < arrNumbers.length; i  = 6) {
    // create a sub array for the first 6 numbers.
    int[] ints = Arrays.copyOfRange(arrNumbers, i, Math.min(arrNumbers.length, i   6));
    // add the first chunk to our resulting array. Repeat until needed.
    for (int j = 0; j < ints.length; j  ) {
        res[j]  = ints[j];
    }
}
  

Результат: res: {2, 4, 6, 8, 10, 12}

Это будет работать для любого размера массива для arrNumbers переменной.

Ответ №2:

Более краткий и эффективный ответ:

     int[] arrNumbers = new int[] { 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]  = arrNumbers[i];
    }
  

вывод: [2, 4, 6, 8, 10, 12]

Ответ №3:

Вы можете легко выполнить итерацию по остальной части массива.

 int sum=0;
for(int i=6;i<arrNumbers.length;i  ){
sum =arrNumbers[i];
}
arrNumbers[5]=sum;