2016-11-22 116 views
-1

我正在创建一个自定义方法,该方法返回AnalyzerInts[]来计算string input的小写,大写,空格,标点符号和字符数。我得到一个未处理的异常错误。 “System.IndexOutOfRangeException:索引超出了数组的范围。”我如何正确检索我的Int[] AnalyzerInts值到我的主要方法?从自定义字符串方法返回一个Int数组?

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 []'。如果函数应该返回,则将返回类型更改为“int []”。 –

+0

这是否甚至编译?我从来没有见过类似'return AnalyzerInts [];'的代码,我也不会期望。 –

+0

直到我正确地将我的方法签名更改为'static int [] StringAnalyzer(string input)''它才编译。现在我只是试图正确地将我的'AnalyzerInts;'值返回到我的主方法而不会出现错误。 –

回答

2

的方法定义可以被看作是[return type] [method name] ([parameters]) 在你的情况,你定义StringAnalyzer接收string参数名称input返回 a string值(表示为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语句:

return AnalyzerInts; 
+0

这工作。请参阅我的编辑。非常感激。 –

1

更改此:

int[] AnalyzerInts = new int[4]; 

到:

int[] AnalyzerInts = new int[5]; 

因为如果你看一下你的代码,你会看到你的阵列被假定为有5个项目,而不是4(提示:你打印5个句子到控制台,并且您访问的最高索引是4. C#数组从索引0开始。)