Выход за пределы массива(не тривиальный случай)
Здравствуйте, пишу программу, которая считывает из файла input.txt матрицу пример input.txt:
1 1 0 0 1 1 0 0 1 1 1
1 1 0 0 1 1 0 1 1 1 1
1 1 0 0 1 1 0 0 1 1 1
1 0 1 0 1 0 1 0 1 1 1
И находит в матрице количество фигур(0 - пусто не 0 - фигура) Фигуры соединяются во всех направлениях(т.е в примере 3 фигуры) реализовал алгоритм в коде, но внезапно выдает exeption OutOfRange( в строке где if (matrixFromFile2D[i, k] != 0 && ..)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
//Программа находит количество фигур в массиве( пустота обозначается 0)
namespace NumberOfSpots
{
class Program
{
static string inputFile = @"./input.txt";
static string outputFile = @"./output.txt";
static void Main(string[] args)
{
String matrixFromFileString = File.ReadAllText(inputFile, Encoding.Default);
matrixFromFileString = matrixFromFileString.Replace("\r", "");
int linesCount = File.ReadAllLines(inputFile, Encoding.Default).Count();
int columnsCount = File.ReadLines(inputFile, Encoding.Default).Take(1).First().Split(' ').Count();
byte[,] matrixFromFile2D = new byte[linesCount + 2, columnsCount + 2];
int a = 0, b = 0;
foreach (var line in matrixFromFileString.Split('\n'))
{
b = 0;
foreach (var element in line.Split(' '))
{
matrixFromFile2D[a + 1, b + 1] = Convert.ToByte(element);
b++;
}
a++;
}
for (int i = 0; i < linesCount + 2; i++)
{
for (int k = 0; k < columnsCount + 2; k++)
{
Console.Write(matrixFromFile2D[i, k]);
}
Console.WriteLine();
}
int iteration = 0;
byte numberOfSpot = 1;
for (int i = 1; i < linesCount - 1; i++)
{
for (int k = 1; k < columnsCount - 1; k++)
{
if (matrixFromFile2D[i, k] != 0 && (matrixFromFile2D[k - 1, i - 1] != 0 || matrixFromFile2D[k, i - 1] != 0 ||
matrixFromFile2D[k + 1, i - 1] != 0 || matrixFromFile2D[k + 1, i] != 0 ||
matrixFromFile2D[k + 1, i + 1] != 0 || matrixFromFile2D[k, i + 1] != 0 ||
matrixFromFile2D[k - 1, i + 1] != 0 || matrixFromFile2D[k - 1, i] != 0))
{
matrixFromFile2D[i, k] = numberOfSpot;
}
else
{
if (matrixFromFile2D[i, k - 1] != 0)
{
numberOfSpot++;
}
}
iteration++;
Console.WriteLine("=========итерация {0} ==========", iteration);
for (int t = 0; t < linesCount + 2; t++)
{
for (int p = 0; p < columnsCount + 2; p++)
{
Console.Write(matrixFromFile2D[t, p]);
}
Console.WriteLine();
}
}
}
Console.WriteLine("Количество пятен: {0}", numberOfSpot);
Console.ReadKey();
}
}
}
Не могу разобраться,помогите, пожалуйста
Источник: Stack Overflow на русском