2016-06-05 10 views
0

Мне нужно написать программу, которая находит разницу между суммами квадратных диагоналей матрицы для домашней работы, но мой код генерирует исключение IndexOutOFRange, и я не знаю, как его исправить.Диагональное различие OutOfRange Exception C#

Исходный код ниже: // вход 11 2 3 4 4 5 6 10 8 -12 // желаемый результат: 15

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 


    class diagonalDifference 
    { 
     static void Main() 
     { 

    int N = Convert.ToInt16(Console.ReadLine()); 
    int[,] arr = new int[N, N]; 
    string str = string.Empty; 

    for (int i = 0; i < N; ++i) 
    { 
     string[] strArr = Console.ReadLine().Split(' '); 
     for (int j = 0; j < strArr.Length; ++j) 
     { 
      arr[i, j] = Convert.ToInt16(strArr[j]); 
     } 
    } 

    int left = 0, right = N - 1, ldTotal = 0, rdTotal = 0; 
    while (left <= right) 
    { 


    ldTotal += arr[left, left]; 


    rdTotal += arr[left++, right]; 
    }  

    Console.WriteLine(Math.Abs(ldTotal - rdTotal)); 



    } 
     } 
+0

На какой строке кода вы получите исключение? Вы можете проверить его в свойстве StackTrace для исключения при запуске отладчика. –

+0

i get it on: ldTotal + = arr [левый, левый]; –

+0

Представленный код должен зависеть от 'while (N> 0) ldTotal + = arr [left, left];' поскольку это бесконечный цикл. Есть ли фигурные скобки? Также переменная 'left' никогда не изменяется. Просьба уточнить код. –

ответ

0
class diagonalDifference 
    { 
     static void Main() 
     { 

    int N = Convert.ToInt16(Console.ReadLine()); 
    int[,] arr = new int[N, N]; 
    string str = string.Empty; 

    for (int i = 0; i < N; ++i) 
    { 
     string[] strArr = Console.ReadLine().Split(' '); 
     for (int j = 0; j < strArr.Length; ++j) 
     { 
      arr[i, j] = Convert.ToInt16(strArr[j]); 
     } 
    } 

    int left = 0, right = N - 1, ldTotal = 0, rdTotal = 0; 
    while (left <= (N-1)) 
    { 


    ldTotal += arr[left, left]; 


    rdTotal += arr[left, right]; 
Left++; 
Right--; 
    }  

    Console.WriteLine(Math.Abs(ldTotal - rdTotal)); 



    } 
     } 
+0

Большое вам спасибо! –

+0

сделаю! Еще раз спасибо –