Задать вопрос
@GladeOff

Как решить ошибку Unhandled exception. System.IndexOutOfRangeException: Index was outside the bounds of the array?

Начал учить язык C# по этому видеоролику.

Там создается Pacman в консоли для примера, и у меня, как и ещё у некоторых людей в комментариях, возникает определенная ошибка:

Unhandled exception. System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at System.String.get_Chars(Int32 index)
   at Pacman.Program.ReadMap(String path) in D:\Рабочая папка\C# proj\Pacman\Pacman\Program.cs:line 27
   at Pacman.Program.Main(String[] args) in D:\Рабочая папка\C# proj\Pacman\Pacman\Program.cs:line 11

D:\Рабочая папка\C# proj\Pacman\Pacman\bin\Debug\net6.0\Pacman.exe (процесс 3320) завершил работу с кодом -532462766.
Нажмите любую клавишу, чтобы закрыть это окно:

С чем она связана и как решить?

using System;
using System.IO;

namespace Pacman
{
    internal class Program
    {
        static void Main(string[] args)
        {

            char[,] map = ReadMap("map.txt");
            DrawMap(map);

        }


        private static char[,] ReadMap(string path)
        {
            string[] file = File.ReadAllLines("map.txt");

            char[,] map = new char[GetMaxLengthOfLine(file), file.Length];

            for (int x = 0; x < map.GetLength(0); x++)
            {
                for (int y = 0; y < map.GetLength(1); y++)
                {
                    map[x, y] = file[y][x];
                }
            }
            return map;
        }

        private static void DrawMap(char[,] map)
        {
            for (int y = 0; y < map.GetLength(1); y++)
            {
                for (int x = 0; x < map.GetLength(0); x++)
                {
                    Console.Write(map[x, y]);
                }
                Console.Write("\n");
            }
        }
        private static int GetMaxLengthOfLine(string[] lines)
        {
            int maxLength = lines[0].Length;

            foreach (var line in lines)
                if (line.Length > maxLength)
                {
                    maxLength = line.Length;
                }

            return maxLength;
        }
    }
}
  • Вопрос задан
  • 867 просмотров
Подписаться 1 Простой 1 комментарий
Помогут разобраться в теме Все курсы
  • OTUS
    C# Developer. Professional
    6 месяцев
    Далее
  • Ulearn.me
    Основы программирования на примере C#. Часть 1
    1 неделя
    Далее
  • Software-testing.ru
    Программирование на C# для тестировщиков
    10 недель
    Далее
Решения вопроса 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Переведите текст ошибки на русский. У вас выход за границу массива. Запустите код в отладчике - он остановится в том месте, где это происходит.

Возможно файл map.txt лежит не там, программа его не находит и не может его прочитать. Получается пустой массив file, но в функции GetMaxLengthOfLine идет обращение к 0-вому элементу, а его нет.

Или строки в файле разной длины, тогда при присваивании map[x, y] = file[y][x]; идет выход за границу массива file[y] в не самой длинной строке. Ведь x проходится до длины самой длинной строки.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы