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