Вычислить целые части элементов после последнего отрицательного в двумерном массиве C#

Нужно в двумерном массиве, после последнего отрицательного элемента вычислить сумму целых частей элементов, я перебрал массив с конца и когда дойдет до отрицательного то цикл остановится, ответ должен получиться по сути: 35 + 1 + 2 = 38, а у меня 66 выходит

        {
            double[,] array = new double[,]
            {
                {14.5, 16.7, 9.2, 6.5 },
                {4, -4, 17, 11 },
                {-25, 35.6, 1, 2 },
            };


            double result = 0;
            for (int i =  array.Length - 1; i >= 0; i--)
            {
                 if (i > 0) { result += i;  }

                 if (i < 0) { break; }
          
            }
            Console.WriteLine($"{Math.Floor(result)}");


Ответы (1 шт):

Автор решения: Andrei Khotko

Идея правильная, реализация хромает. Не забывайте, что у вас двумерный массив, поэтому вам его нужно обходить используя 2 цикла (по строкам и по столбцам). Также, @aepot в комментариях правильно обратил внимание на строку из вашего кода result += i. Вы пытаетесь складывать индексы, а не значения, что является грубой ошибкой (или случайной опиской). К тому же, исходя из условия, вам нужно отсекать дробную часть при сложении. Это можно легко сделать, явно приведя double к int.

В итоге, получаем следующий код:

double[,] array = new double[,]
{
    {14.5, 16.7, 9.2, 6.5},
    {4, -4, 17, 11},
    {-25, 35.6, 1, 2}
};

var height = array.GetLength(0);
var width = array.GetLength(1);

int result = 0;
int j = -1;
for (int i = height - 1; i >= 0 && j < 0; i--)
{
    result = 0;
    for (j = width - 1; j >= 0; j--)
    {
        var number = array[i, j];
        
        if (number > 0)
        {
            result += (int)number; // гарантированно отсекаем у number дробную часть
        }
        else if (number < 0)
        {
            break;
        }
    }
}
Console.WriteLine(result);
→ Ссылка