2016-11-22 2 views
-1

Я создаю пользовательский метод, который возвращает AnalyzerInts[], чтобы подсчитывать строчные, прописные, пробельные символы, знаки препинания и символы string input. Я получаю необработанную ошибку исключения. «System.IndexOutOfRangeException: индекс находился за пределами массива». Как правильно получить значения Int[] AnalyzerInts в моем основном методе?Возвращение массива Int из пользовательского метода String?

class Program 
{ 
    static void Main(string[] args) 
    { 
     Console.WriteLine("Enter a string/sentence: "); 
     string userInput = Console.ReadLine(); 
     int[] answers = StringAnalyzer(userInput); 
     Console.WriteLine("You have {0} uppercase letters in your string.", answers[0]); 
     Console.WriteLine("You have {0} lowercase letters in your string.", answers[1]); 
     Console.WriteLine("You have {0} whitespace characters in your string.", answers[2]); 
     Console.WriteLine("You have {0} punctuation characters in your string.", answers[3]); 
     Console.WriteLine("You have {0} characters in your string.", answers[4]); 
    } 





    static int[] StringAnalyzer (string input) 
    { 
     int[] AnalyzerInts = new int[4]; 
     for (int x = 0; x < input.Length; x++) 
     { 
      if (char.IsUpper(input[x])) 
      { 
       AnalyzerInts[0]++; 
      } 
      else if (char.IsLower(input[x])) 
      { 
       AnalyzerInts[1]++; 
      } 
      else if (char.IsWhiteSpace(input[x])) 
      { 
       AnalyzerInts[2]++; 
      } 
      else if (char.IsPunctuation(input[x])) 
      { 
       AnalyzerInts[3]++; 
      } 
      AnalyzerInts[4]++; 
     } 
     return AnalyzerInts; 
    } 
+2

Он выдает ошибку, потому что вы объявляете функцию как возвращающую строку, но пытаетесь вернуть ' ИНТ [] '. Измените возвращаемый тип на 'int []', если это то, что должна возвращать функция. –

+0

Это даже компилируется? Я никогда не видел кода, который выглядит как 'return AnalyzerInts [];', и я не ожидал. –

+0

Он не скомпилировался, пока я правильно не изменил свою подпись метода на 'static int [] StringAnalyzer (string input)'. Теперь я просто пытаюсь правильно вернуть значение моего AnalyzerInts; 'в мой основной метод, не получив ошибку. –

ответ

2

Определение метода можно рассматривать как [return type] [method name] ([parameters]) В вашем случае, вы определили StringAnalyzer, чтобы получить string с параметром input и return a string значение (указано)перед именем метода)

Что вы ищете, чтобы иметь метод принять string, но возвращает массив целых чисел int[], поэтому метод должен быть определен как

static int[] StringAnalyzer(string input) { /*...*/} 

Кроме того, при возвращении вам не нужен [], вам нужно только return AnalyzerInts

Наконец, необходимо инициализировать массив содержит 5 элементов не 4: int[] AnalyzerInts = new int[5];

+0

Это сработало. Спасибо. Теперь я пытаюсь правильно вернуть возвращаемое значение 'AnalyzerInts; 'в мой основной метод. См. Редактирование. –

+0

См. Редактирование для ответа, проблема может заключаться в том, что ваш массив был инициализирован только с 4 элементами, но вы используете 5 – KMoussa

+0

, которые я вижу. 'Int [] name = new int [число элементов]' при объявлении новой переменной. Но 'name [0]' при вызове первого элемента. Таким образом, индекс 0 используется только при вызове элементов, а не при объявлении массива. Я прав? –

1

Ваш возвращаемый тип string и вы пытаетесь вернуть int[].

Изменить метод подпись:

static int[] StringAnalyzer (string input) 

и изменить обратное заявление:

return AnalyzerInts; 
+0

Это сработало. См. Мое редактирование. Очень признателен. –

1

Изменить это:

int[] AnalyzerInts = new int[4]; 

к:

int[] AnalyzerInts = new int[5]; 

Потому что, если вы посмотрите на код, вы увидите, что предполагается, ваш массив имеет 5 элементов, а не 4. (Подсказка: Вы печать 5 предложений на консоль, а самый высокий индекс, к которому вы обращаетесь, - 4. C# массивы начинаются с индекса 0.)

Смежные вопросы