@GladeOff

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

Всем привет, начал учить язык C# по этому видеоролику
https://www.youtube.com/watch?v=w8rRhAup4kg&lc=Ugx...

Там создается 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;
        }
    }
}
  • Вопрос задан
  • 645 просмотров
Решения вопроса 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Переведите текст ошибки на русский. У вас выход за границу массива. Запустите код в отладчике - он остановится в том месте, где это происходит.

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

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

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

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