Как я могу сделать IntStream
, который начинается в середине заданного последовательного диапазона, а затем передает следующие числа, начиная с середины и чередуя их влево и вправо. Например, для данного последовательного диапазона чисел 1 2 3 4 5
пользовательская последовательность будет 3 2 4 1 5
или 3 4 2 5 1
в зависимости от того, начинаете ли вы сначала влево или вправо.
Я в основном пытаюсь выполнить итерацию массива, начиная с середины и равномерно выходящего наружу (сначала не влево или вправо).
Я пробовал это, используя только циклы for
, но код беспорядочен, и я думаю, что было бы лучше просто выстроить коллекцию или поток чисел вместо того, чтобы проверять ее на летать (из-за всех исключений из списка исключений, которые необходимо проверить). Вот исходный код, который, я думаю, будет намного лучше, чем предварительно вычисленный поток ints:
int middle = myArray.length / 2;
Object value = myArray[middle]; //have to reference middle since the for loop won't
//do operation on value
for (int offset = 1; true; offset++) {
int nextRight = middle + offset;
int nextLeft = middle - offset;
if (nextRight < myArray.length) { // Have to guard against exception, but can't catch exception ahead of time because left or null may not be empty.
Object value = myArray[nextRight];
//do operation on value
}
if (nextLeft >= 0) {
Object value = myArray[nextRight];
//do operation on value
}
if (nextRight >= myArray.length) {
break; //exit logic
}
if (nextLeft < 0) {
break; //exit logic
}
}