字符数组金字塔遍历至最后元素时触发索引越界,需用while循环解决
解决字符数组构建金字塔时的索引越界问题
错误原因分析
- 循环条件错误:原代码用
charArr[i] != 0作为循环终止条件,这是C/C++的字符串终止逻辑,但C#中字符串转成的char数组不存在末尾的空终止符('\0')。当i递增到等于数组长度时,访问charArr[i]必然触发索引越界。 - 逻辑不符合预期:内层循环
j < i会导致第一行(i=0)无输出,不符合金字塔每行递增一个字符的需求。
修正后的代码(使用while循环)
Console.WriteLine("Write word"); string s = Console.ReadLine(); char[] charArr = s.ToCharArray(); int i = 0; while (i < charArr.Length) // 确保i始终在数组有效索引范围内 { int j = 0; while (j <= i) // 调整条件,输出从第0个到第i个字符 { Console.Write(charArr[j]); j++; } Console.WriteLine(); i++; }
关键修正点
- 外层循环:改用
i < charArr.Length作为终止条件,直接限制i的最大值为数组最后一个元素的索引(charArr.Length - 1),彻底避免越界。 - 内层循环:将
j < i改为j <= i,保证第一行(i=0)能输出第一个字符,后续每行依次多输出一个字符,符合金字塔的结构要求。
内容的提问来源于stack exchange,提问作者MaglitNostra
相关产品推荐
相关产品推荐

