数组连续子序列输出需求与代码结果不符的问题咨询
修正C#代码以输出指定连续子序列
给定数组[10, 20, 30, 40],期望输出的连续子序列为:
10 20 30 40 20 30 40 30 40
你的现有代码存在两个核心问题:
- 内层循环仅输出两个元素,没有拼接从起始索引到数组末尾的所有元素
- 内层循环的终止条件
j < myNum.Length - 1限制了遍历范围,无法触及数组最后一个元素
修改方案1:基础循环拼接
通过外层循环控制子序列的起始索引,内层循环拼接从起始索引到末尾的所有元素,最后去掉末尾多余空格后输出:
class Program { static void Main(string[] args) { int[] myNum = { 10, 20, 30, 40 }; // 外层循环遍历起始索引,最后一个起始索引为2(对应子序列30 40) for (int i = 0; i < myNum.Length - 1; i++) { string subSeq = ""; // 内层循环拼接从i到数组末尾的所有元素 for (int j = i; j < myNum.Length; j++) { subSeq += myNum[j] + " "; } // 移除末尾多余空格后输出 Console.WriteLine(subSeq.TrimEnd()); } } }
修改方案2:使用string.Join简化实现
利用C#的string.Join方法直接拼接子数组元素,代码更简洁:
class Program { static void Main(string[] args) { int[] myNum = { 10, 20, 30, 40 }; for (int i = 0; i < myNum.Length - 1; i++) { // C# 8.0+ 支持范围运算符,直接获取从i到末尾的子数组 Console.WriteLine(string.Join(" ", myNum[i..])); } } }
如果使用的是C# 8.0以下版本,可以用Enumerable.Skip替代范围运算符:
Console.WriteLine(string.Join(" ", myNum.Skip(i)));
内容的提问来源于stack exchange,提问作者florp
相关产品推荐
相关产品推荐

