색인 배열이 잘못되었다고 말하는 오류가 발생하지만 잘못된 것을 잘 모릅니다. Visual Studio에서 오류로 강조 표시된 행을 주석 처리했습니다. ReadData()
방법에서 발생합니다. 어떤 조언을 주셔서 감사합니다. 타입 'System.IndexOutOfRangeException'처리되지 않은 예외 Lab3.exe 추가 정보 발생텍스트 파일에서 읽으려고 할 때 인덱스가 배열에서 벗어나고 int32.tryparse
형 'System.IndexOutOfRangeException'의 첫 번째 예외가 발생 Lab3.exe : 인덱스 배열의 범위를 벗어난 . '[9140] Lab3.vshost.exe : Managed (v4.0.30319)'프로그램이 코드 0 (0x0)으로 종료되었습니다.
class Program
{
private const int MAX_MEDIA_OBJECTS = 100; // Max number of array objects
private int mediaCount = 0; // Counter to keep track of amount of media in Data.txt
private Media[] media = new Media[MAX_MEDIA_OBJECTS];
private Song[] songs = new Song[MAX_MEDIA_OBJECTS];
private Movie[] movies = new Movie[MAX_MEDIA_OBJECTS];
private Book[] books = new Book[MAX_MEDIA_OBJECTS];
static void Main(string[] args)
{
Program lab3 = new Program();
bool didUserExit = false;
int userSelectedOption;
lab3.ReadData();
do // Do While loop for the options menu, exits when the user selects the exit option.
{
lab3.DisplayOptions();
string userInput = Console.ReadLine();
if (int.TryParse(userInput, out userSelectedOption))
{
lab3.ProcessSelectedInput(userSelectedOption, lab3);
}
else
{
lab3.DisplayErrorMessage();
}
Console.WriteLine("Press any key to continue...");
Console.ReadKey();
} while (!didUserExit);
}
public void ReadData()
{
// Opens the Data.txt file for read access
FileStream mediaFile = new FileStream("Data.txt", FileMode.Open, FileAccess.Read);
StreamReader mediaData = new StreamReader(mediaFile);
string mediaRow; // Holds each media data per row
while ((mediaRow = mediaData.ReadLine()) != null)
{
// Splits each row with the delimiter
string[] mediaDataSplit = mediaRow.Split('|');
// Temporary variables to hold media data
int year;
/** ERROR HAPPENS HERE ACCORDING TO VISUAL STUDIO IDE */
bool didConvert = Int32.TryParse(mediaDataSplit[2].Trim(), out year);
if (!didConvert)
{
Console.WriteLine("Improperly formated field at line {0}", mediaCount + 1);
Environment.Exit(0);
}
if (didConvert)
{
Console.WriteLine("trace year {0}", mediaDataSplit[2]);
}
mediaCount++;
}
}
public void ProcessSelectedInput(int userSelectedOption, Program labReference)
{
switch (userSelectedOption)
{
case 1:
Console.WriteLine("case1");
break;
case 2:
Console.WriteLine("case2");
break;
case 3:
Console.WriteLine("case3");
break;
case 4:
Console.WriteLine("case4");
break;
case 5:
Console.WriteLine("case5");
break;
case 6:
Environment.Exit(0);
break;
default:
labReference.DisplayErrorMessage();
break;
}
}
public void DisplayOptions()
{
Console.Clear();
Console.WriteLine("1. List All Books");
Console.WriteLine("2. List All Movies");
Console.WriteLine("3. List All Songs");
Console.WriteLine("4. List All Media");
Console.WriteLine("5. Search All Media by Title");
Console.WriteLine("");
Console.WriteLine("6. Exit Program");
Console.WriteLine("");
Console.Write("Enter choice: ");
}
public void DisplayErrorMessage()
{
Console.WriteLine("*** Invalid Choice - Try Again ***");
}
}
http://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – SLaks
질문이 구체적이지 않고 오류가 발생한 부분에 대한 세부 정보가 너무 적습니다. 최소한 stacktrace를 포함하십시오. –
SLak이 게시 한 링크를 실제로 확인해야합니다. 작고 간단한 프로그램을 디버그 할 수 없다면 배열이 범위를 벗어난 것보다 훨씬 심각한 문제가 있습니다. –