如何在C#中通过单循环实现特定字符串序列的遍历输出?
用C#单循环实现指定序列输出的方案
问题说明
需要输出序列:LOWEST LOW MEDIUM HIGH HIGHEST HIGHEST HIGH MEDIUM LOW LOWEST,希望通过单循环实现,当前代码运行后输出为:LOWEST LOW MEDIUM HIGH HIGHEST HIGH MEDIUM LOW LOWEST(缺少一个HIGHEST)。
可行性结论
完全可以通过单循环实现,你的思路方向是对的,只需调整循环范围和索引计算逻辑即可得到目标输出。
原代码问题分析
原代码存在两个关键问题:
- 循环总次数为
(phases.Length -1)*2 +1 = 9次,但目标序列需要输出10个元素,循环次数不足; - 索引计算在i超过数组长度时,直接从
HIGH开始往回走,漏掉了第二次HIGHEST的输出。
修正后的代码
方案一(逻辑清晰版)
class Program { static void Main() { string[] phases = ["LOWEST", "LOW", "MEDIUM", "HIGH", "HIGHEST"]; // 目标序列是正向遍历+反向遍历,共10个元素 int totalElements = phases.Length * 2; for (int i = 0; i < totalElements; i++) { int index; if (i < phases.Length) { // 前5次循环:正向取索引0-4 index = i; } else { // 后5次循环:从索引4往回取到0 index = totalElements - 1 - i; } Console.Write(phases[index] + " "); } } }
方案二(代码简化版)
利用Math.Min简化索引计算逻辑,效果与方案一完全一致:
class Program { static void Main() { string[] phases = ["LOWEST", "LOW", "MEDIUM", "HIGH", "HIGHEST"]; int totalElements = phases.Length * 2; for (int i = 0; i < totalElements; i++) { // 取i和(totalElements-1 -i)中的较小值,自动实现先增后减的索引逻辑 int index = Math.Min(i, totalElements - 1 - i); Console.Write(phases[index] + " "); } } }
运行结果
修正后的代码运行后会输出目标序列:
LOWEST LOW MEDIUM HIGH HIGHEST HIGHEST HIGH MEDIUM LOW LOWEST
内容的提问来源于stack exchange,提问作者Norvz
相关产品推荐
相关产品推荐

