c# - 我创建了一个 While 循环将每个字符转换为大写或小写的相反形式,最后我得到了数组错误的界限
问题描述
(不允许使用 LINQ 或其他库)我创建了一个 While 循环,将每个字符转换为大写或小写的相反形式,在循环结束时我得到一个 'System.IndexOutOfRangeException: 'Index was outside数组的边界。'' 我不知道如何解决这个错误。循环按预期执行,但在数组中的最后一个字符已转换并重新测试第一个嵌入式 while 循环的参数时会遇到此错误。另外,如果有更简单的方法可以做到这一点,我会全力以赴。提前致谢
string text2 = "HELLO my friEND";
char[] convert = text2.ToCharArray();
int b = 0;
int a = convert.Length;
while (b <= a)
{
while (char.IsUpper(convert[b]))
{
char.ToLower(convert[b]);
b++;
}
while (char.IsLower(convert[b]))
{
char.ToLower(convert[b]);
b++;
}
while (char.IsWhiteSpace(convert[b]))
{
b++;
}
}
string hello = new string(convert);
Console.Write(hello);
Console.WriteLine();
Console.Write("test");
return 0;
解决方案
while (b <= a)
需要while (b < a)
。索引是从零开始的,这意味着最后一个索引将等于length - 1
。
您还可以b
在每次检查(b++
每个内部while
循环while
中b
的. 你需要在每个内部while
循环中检查这个,比如
while (b < a && char.IsUpper(convert[b]))
或者,完全重新设计此方法以首先避免这些类型的问题(例如,使用for
循环)。