我正在创建一个自定义方法,返回AnalyzerInts[]
来计算string input
的小写,大写,空格,标点符号和字符数。我收到一个未处理的异常错误。 “System.IndexOutOfRangeException:索引超出了数组的范围。”如何正确地将Int[] AnalyzerInts
值检索到主方法中?
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;
}
答案 0 :(得分:2)
方法定义可以被视为[return type] [method name] ([parameters])
在您的情况下,您定义了StringAnalyzer
以接收名为string
的{{1}}参数,并且返回 input
值(由{{1}指示在方法名称之前)
您正在寻找的是让方法接受string
但返回整数数组string
,因此该方法应定义为
string
此外,退货时,您不需要int[]
,只需static int[] StringAnalyzer(string input) { /*...*/}
最后,您需要初始化数组以包含5个不是4的元素:[]
答案 1 :(得分:1)
您的返回类型为string
,而您正在尝试返回int[]
。
将您的方法签名更改为:
static int[] StringAnalyzer (string input)
并将您的return语句更改为:
return AnalyzerInts;
答案 2 :(得分:1)
改变这个:
csv_list = [row[0], row[1], len(row[0]) for row in all_data]
csv_data = sorted(csv_list, key=lambda row: row[2])
为:
int[] AnalyzerInts = new int[4];
因为如果你查看你的代码,你会看到你的数组假定有5个项目,而不是4个。(提示:你正在向控制台打印5个句子,你访问的最高索引是4 C#数组从索引0开始。)