title: System.IndexOutOfRangeException - Index was outside the bounds of the array
body: <p>I am creating a program that imports a 2d object array of information from an excel sheet. It then passes this array to ProcessObjects method to be processed and printed/exported back out to an excel template.Can anyone tell me why I'm getting this error message?</p>
  
  <p>"An unhandled exception of type 'System.IndexOutOfRangeException' occurred in Project.exe</p>
  
  <p>Additional information: Index was outside the bounds of the array."</p>
  
  <pre><code>private void ProcessObjects(object[,] classesArray, object[,] classesAvailabilityArray, Excel.Workbook workbook2, Excel.Sheets excelSheets)
  {
      // once classes are selected, they are copied to a temporary location
      // while they're waiting to be printed
      object[,] tempArray = new object[6,3];
  
      // This stops the while loop once enough credit hours have been taken 
      // It must reach 123 hours for CS Degree .
      int hourCounter = 0;
  
      int iteration = 0;
  
      while (hourCounter &lt; 123)
          {
              // this while loop copies some classes from classesArray to tempArray
              // so they can be printed into the excel template (NewStudentTemplateCS.xlsx)
              //
              int classes = 0, hours = 0; // stops while loop if limit is reached
              int w = 0, x = 0; // used to select individual elements of tempArray (0 based)
                                // w = row
                                // x = column
              int y = 1, z = 1; // used to select individual elements of classesArray (1 based)
                                // y = row
                                // z = column
              while(classes &lt; 7 || hours &lt; 17)
              {
                  // this loop checks the status of the flag and stops at the first avaliable
                  // class/row of classesArray
                  while (classesArray[y,7] == (object)1)
                  {
                      y++;
                  }
  
                  // copies the call EX: "MATH 2313" from classesArray to tempArray
                  tempArray[w,x] = classesArray[y,z];
                  x += 2;
                  z += 2;
                  // copies the name EX: "Calculus I" from classesArray to tempArray
                  tempArray[w, x] = classesArray[y, z];
                  x++;
                  z++;
                  // Copies the hours EX: "3" from classesArray to tempArray
                  tempArray[w, x] = classesArray[y, z];
  
                  Console.WriteLine("debug test");
  
                  // increments classes, hours, and hourCounter for exit decision
                  classes += 1;
                  hours += (int)classesArray[y, z];
                  hourCounter += (int)classesArray[y, z];
  
                  // sets flag to one
                  z += 3;
                  classesArray[y, z] = 1;
  
              }// end while loop
  
              // print method that prints temp array and clears tempArray for next use
              PrintArray(tempArray, iteration, workbook2, excelSheets);
  
              // iterates iteration
              iteration++;
  
          } // end while loop
          // print method that prints temp array and clears tempArray for next use
          PrintArray(tempArray, iteration, workbook2, excelSheets);
  
          // iterates iteration
          iteration++;
  
      } // end while loop
  } // end ProcessObjects method
  </code></pre>
  
  <p>I have commented out each of the following lines individually, but each line of code all returns the same error I listed above.</p>
  
  <pre><code>Console.WriteLine("debug test");
  
  // increments classes, hours, and hourCounter for exit decision
  classes += 1;
  hours += (int)classesArray[y, z];
  hourCounter += (int)classesArray[y, z];
  
  // sets flag to one
  z += 3;
  classesArray[y, z] = 1;
  </code></pre>