首页 > 解决方案 > 我创建了一个 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; 

标签: c#

解决方案


while (b <= a)需要while (b < a)。索引是从零开始的,这意味着最后一个索引将等于length - 1

您还可以b在每次检查(b++每个内部while循环whileb的. 你需要在每个内部while循环中检查这个,比如

while (b < a && char.IsUpper(convert[b]))

或者,完全重新设计此方法以首先避免这些类型的问题(例如,使用for循环)。


推荐阅读