Ошибки C # в блоке Try, включающем цикл, массив, индекс и исключение IndexOutOfRangeException - PullRequest
0 голосов
/ 13 ноября 2010

Я включил свой черновик исходного кода ниже. Буду признателен за любую информацию о том, что я делаю неправильно. Я не уверен, что мой синтаксис правильный ... Кроме того, я нашел пример на Cramster; но я не уверен, что в примере реализован «индекс» в соответствии с указаниями (пожалуйста, укажите это, если я ошибаюсь в этом) инструкциями. Я также думаю, что цикл «for» является довольно повторяющимся, поскольку создается впечатление, что он устанавливает то же самое, что должен установить нижний индекс ... Этот код является ответом на следующее присваивание:

"Напишите программу, в которой вы объявляете массив из пяти целых чисел и сохраняете пять значений в массив. Напишите блок try, в который вы помещаете цикл, который пытается получить доступ к каждому элемент массива, увеличивая индекс от 0 до 10. Создайте блок catch, который ловит возможное IndexOutOfRangeException; в пределах блока отобразите «Сейчас» Вы зашли слишком далеко. »на экране. Сохраните файл как GoTooFar.cs. "

Microsoft® Visual C # ® 2008, Введение в объектно-ориентированное программирование, 3e, Джойс Фаррелл

Мой исходный код с ошибками:

using System;

namespace Further

{
   public class GoTooFar
   {
      public static void Main()
      {
         private static int[] fiveIntArray = {1, 2, 3, 4, 5};
         //private static int CUTOFF = 11;    

         int subscript;
         int rate;


         try
         {
            //bool further;
            //public static int DetermineArray(int further)
            for(int x = 0; x < 10; x++)
            if(further < 11)
               throw new IndexOutofRangeException("Now you've gone too far.");
               subscript = 0;
            else
               subscript = 10;
            rate = fiveIntArray[subscript];
            return rate;
         }

         catch(IndexOutOfRangeException e)
         {
            throw;
            Console.WriteLine(e.StackTrace);
            //Console.WriteLine("Now you've gone too far.");
            //return e;
         }
      }
   }   
}                                       

// Пример, который я нашел на Cramster.com:

using System;
namespace Console2
{   
   class Class1
   {
      static void Main(string[] args)
      {
         int[] numbers = new int[5] {1, 2, 3, 4, 5};

         try
         {
            for(int i=0;i<10;i++)
            if(i>5)
               throw new IndexOutOfRangeException("Now you’ve gone too far.");
         }

         catch(IndexOutOfRangeException e)
         {
            throw;
         }

      }//end ma...
   }
}

1 Ответ

1 голос
/ 13 ноября 2010

Вы не должны вызывать исключение, просто поймайте то, которое выбрасывает среда выполнения.Есть несколько других проблем:

  1. Вы объявляете поле внутри метода.Просто отбросьте private static.
  2. Только цикл if / else был в цикле for, но вы явно хотите, чтобы доступ был тоже.Я предпочитаю всегда использовать фигурные скобки, но это субъективно.
  3. Вы, очевидно, намереваетесь возвращать каждую итерацию, что не имеет смысла.

Это может быть так просто, как:

public static void Main()
{
    int[] fiveIntArray = {1, 2, 3, 4, 5};
    try
    {
        for(int x = 0; x < 10; x++)
        {
            int rate = fiveIntArray[x];
        }
    }
    catch(IndexOutOfRangeException e)
    {
        Console.WriteLine("Now you've gone too far.");
    }       
}

Обратите внимание, что мы на самом деле не используем rate.Это просто так, так что это будет действительное утверждение.

...