2014-03-06 44 views
-2

我收到一个错误,说我有一个数组超出索引,但我不知道我在做什么错误。我已经注意到Visual Studio突出显示的错误。它发生在ReadData()方法中。感谢您的任何建议。尝试从文本文件中读取时数组超出索引,int32.tryparse

类型“System.IndexOutOfRangeException”的第一次机会异常发生在Lab3.exe 类型“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 ***"); 
    } 
} 
+6

http://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – SLaks

+0

的问题不是特定的,请详细说明错误发生的位置,至少包括一个堆栈跟踪 –

+0

您应该检查SLak发布的链接。如果你不能调试一个小而简单的程序,那么你的问题比数组超出界限要严重得多。 –

回答

4

的错误可能是发生在这里:mediaDataSplit[2]

结果从当你在这里:string[] mediaDataSplit = mediaRow.Split('|');

无论是看不有尽可能多行“|”如你所期待的那样,所以当它吐出时,它不会创建一个大的数组。

您应该检查mediaRow在失败时的值。

3

mediaDataSplit包含少于三个元素或它是空的。在您尝试访问的第三个元素,你可以检查元素是否存在:

if(mediaDataSplit.Length >= 3) 
    bool didConvert = Int32.TryParse(mediaDataSplit[2].Trim(), out year); 
相关问题