Цикл for с if(array[i + 1]) выходит за границы массива; как зациклиться на начало?

У меня есть массив и цикл for, оператор if, который проверяет i + 1. Однако на последней итерации цикла массив выходит за границы. Я хочу вернуться к началу массива, когда это произойдет. Как лучше всего вернуться к array[0]? Вот мой код:

int[] array = new int[5];
array[0] = new int(5);
array[1] = new int(7);
array[2] = new int(3);
array[3] = new int(1);
array[4] = new int(9);

for (int i = 0; i < array.Length; i++)
{
    if (array[i + 1] != 0)
        // Do something (obviously in this example, this will always occur)
    {
}

Я могу сделать следующее, но для этого мне нужно продублировать свой код (и мой текущий код внутри этого огромен). Есть ли лучший способ сделать следующее?

int[] array = new int[5];
array[0] = new int(5);
array[1] = new int(7);
array[2] = new int(3);
array[3] = new int(1);
array[4] = new int(9);

for (int i = 0; i < array.Length; i++)
{
    if (i != array.Length - 1)
    {
        if (array[i + 1] != 0)
            // Do something (obviously in this example, this will always occur)
        {
    }
    else
    {
        if (array[0] != 0)
            // Do something (obviously in this example, this will always occur)
        {
    }
}

person Keavon    schedule 04.12.2013    source источник
comment
Почему он проверяет i+1?   -  person    schedule 04.12.2013
comment
забыть for петель. Используйте foreach   -  person Federico Berasategui    schedule 04.12.2013
comment
foreach не лучший выбор, если вам нужно сравнить следующий элемент.   -  person MarcinJuraszek    schedule 04.12.2013
comment
Он проверяет i + 1, потому что в реальном коде он вычитает array[i] из array[i + 1]. Я не включил это в упрощенную версию.   -  person Keavon    schedule 04.12.2013


Ответы (3)


Используйте модуль:

if(array[(i+1) % array.Length] != 0) {...}

Это в основном вычтет array.Length из (i+1) до (i+1) ‹ array.Length

person nolegs    schedule 04.12.2013

array[(i + 1) % array.Length]

Должен сделать трюк без слишком большой боли.

person Marc Gravell    schedule 04.12.2013

person    schedule
comment
Оператор && не оценивает правую часть, если левая уже равна false, потому что для возврата true требуется, чтобы обе стороны были true. - person MarcinJuraszek; 04.12.2013