Как решить индекс вне диапазона в C#
Дорогие все, я написал следующий фрагмент кода, чтобы заполнить популяцию размером 25 хромосомами, где каждая хромосома представляет собой матрицу размером 5*5, где каждый элемент в этой матрице будет либо 0, либо 1. Этот код для создания начальной популяции для генетического алгоритма :
using System; using System.IO; using System.Text; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.Threading; using AUV_Topology; using System.Collections.Generic; using System.Media; namespace AUVtopology { public partial class Form1 : Form { static int[,] auvChromosomes; static int[][,] population; private void moveGenetic_Click(object sender, EventArgs e) { FileStream fs = new FileStream("C:/Users/Welcome/Desktop/intialPopulation.txt", FileMode.Append, FileAccess.Write); population = new int[25][,]; // jagged array Random rnd = new Random(); // to gereate random number (either 0 or 1) calculateCellsCenters(200, 325); // Compute all the center points (Xc,Yc) for all cells of the partitioned region (grid) auvChromosomes = new int[5, 5]; for (int i = 0; i < population.Length; i++) { population[i] = new int[5, 5]; } using (StreamWriter sw = new StreamWriter(fs)) { for (int i = 0; i < population.Length; i++) { for (int j = 0; j < population[i].Length; j++) { for (int k = 0; k < auvChromosomes.Length; k++) { auvChromosomes[j, k] = rnd.Next(0, 2); sw.Write("|" + auvChromosomes[j, k] + "|"); } // end-inner-for sw.WriteLine(); } // end-outer-inner-for sw.WriteLine("----------------------------------------------------------------------"); } // end-outer-for } // end-using //Genetic_Algorithm(population); } }// end-main-class }// end-name-space
Я не знаю, где это нулевое исключение или индекс вне диапазона?? Я не вижу этого в своем коде, я думаю, что это правда !!
Почему я получил следующую ошибку, когда нажал на кнопку :
See the end of this message for details on invoking just-in-time (JIT) debugging instead of this dialog box. ************** Exception Text ************** System.IndexOutOfRangeException: Index was outside the bounds of the array. at AUVtopology.Form1.moveGenetic_Click(Object sender, EventArgs e) in C:\Users\Welcome\Desktop\project\GAAPS\AUV_Topology\Form1.cs:line 825 at System.Windows.Forms.Control.OnClick(EventArgs e) at System.Windows.Forms.Button.OnClick(EventArgs e) at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) at System.Windows.Forms.Control.WndProc(Message& m) at System.Windows.Forms.ButtonBase.WndProc(Message& m) at System.Windows.Forms.Button.WndProc(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) ************** Loaded Assemblies ************** mscorlib Assembly Version: 4.0.0.0 Win32 Version: 4.6.1648.0 built by: NETFXREL3STAGE CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll ---------------------------------------- AUV_Topology Assembly Version: 1.0.0.0 Win32 Version: 1.0.0.0 CodeBase: file:///C:/Users/Welcome/Desktop/project/GAAPS/AUV_Topology/bin/Release/AUV_Topology.exe ---------------------------------------- System.Windows.Forms Assembly Version: 4.0.0.0 Win32 Version: 4.6.1586.0 built by: NETFXREL2 CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll ---------------------------------------- System Assembly Version: 4.0.0.0 Win32 Version: 4.6.1647.0 built by: NETFXREL3STAGE CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll ---------------------------------------- System.Drawing Assembly Version: 4.0.0.0 Win32 Version: 4.6.1586.0 built by: NETFXREL2 CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll ---------------------------------------- Accessibility Assembly Version: 4.0.0.0 Win32 Version: 4.6.1586.0 built by: NETFXREL2 CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/Accessibility/v4.0_4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll ---------------------------------------- Microsoft.VisualBasic.PowerPacks.Vs Assembly Version: 10.0.0.0 Win32 Version: 10.0.30319.1 CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/Microsoft.VisualBasic.PowerPacks.Vs/10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.PowerPacks.Vs.dll ---------------------------------------- Microsoft.VisualBasic Assembly Version: 10.0.0.0 Win32 Version: 14.6.1586.0 built by: NETFXREL2 CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/Microsoft.VisualBasic/v4.0_10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll ---------------------------------------- ************** JIT Debugging ************** To enable just-in-time (JIT) debugging, the .config file for this application or computer (machine.config) must have the jitDebugging value set in the system.windows.forms section. The application must also be compiled with debugging enabled. For example: <configuration> <system.windows.forms jitDebugging="true" /> </configuration> When JIT debugging is enabled, any unhandled exception will be sent to the JIT debugger registered on the computer rather than be handled by this dialog box.
Примечание : Строка 825 находится в этом заявлении :
FileStream fs = new FileStream("C:/Users/Welcome/Desktop/intialPopulation.txt", FileMode.Append, FileAccess.Write);
Но когда я очищаю решение, перестраиваю проект и запускаю отладчик ... он указывает на следующее утверждение :
auvChromosomes[j, k] = rnd.Next(0, 2);
Что я уже пробовал:
Мне нужно правильно напечатать начальную популяцию, где каждая хромосома представляет собой матрицу размером 5 * 5 ...
ZurdoDev
Просто отладьте его, и вы увидите, что именно происходит.
[no name]
Эта строка кода не может генерировать такое сообщение об ошибке. Вам все еще нужно научиться использовать отладчик для отладки вашего кода.