请求修复C#特定星号图案打印代码的逻辑错误
如何用C#打印指定的星号图案
你想要实现的目标星号图案是:
* * * * *** ******* *** * * * *
你的现有代码问题分析
你当前的代码存在两个核心问题:
- 行数不符:你设置了
n=7,循环执行7次输出7行,但目标图案只有5行; - 逻辑规则错误:你用对角线(
j==i || j==n-i+1)加中间行的条件,绘制的是菱形加横线的图案,和目标图案的星号位置规则完全不匹配。
修正后的代码
下面是能精准输出目标图案的代码,我们针对每行的星号位置规则做了明确的条件判断:
using System; namespace Patterns { class Asterisks { static void Main(string[] args) { // 目标图案为5行,每行11个字符(匹配你给出的星号间隔) int totalRows = 5; int totalCols = 11; for (int currentRow = 1; currentRow <= totalRows; currentRow++) { for (int currentCol = 1; currentCol <= totalCols; currentCol++) { bool printStar = false; // 处理第一行和第五行:在1、4、7、10列打印星号(间隔3个空格) if (currentRow == 1 || currentRow == 5) { printStar = currentCol == 1 || currentCol == 4 || currentCol == 7 || currentCol == 10; } // 处理第二行和第四行:在4、5、6列打印星号(居中的三个星号) else if (currentRow == 2 || currentRow == 4) { printStar = currentCol >= 4 && currentCol <= 6; } // 处理第三行:在3-9列打印7个星号(居中) else if (currentRow == 3) { printStar = currentCol >= 3 && currentCol <= 9; } Console.Write(printStar ? "*" : " "); } Console.WriteLine(); } } } }
代码逻辑说明
- 我们明确了总行数为5,总列数为11(刚好匹配你给出的第一行四个星号、每个间隔3个空格的格式);
- 分三类情况处理每行:
- 第一行和第五行:固定在第1、4、7、10列打印星号,实现
* * * *的效果; - 第二行和第四行:在中间区域打印3个星号,实现
***的居中效果; - 第三行:在中间区域打印7个连续星号,实现
*******的效果。
- 第一行和第五行:固定在第1、4、7、10列打印星号,实现
如果你希望星号间隔更小(比如间隔1个空格),可以把总列数改为7,并调整对应列的判断条件,代码逻辑是类似的。
内容的提问来源于stack exchange,提问作者user16480262
相关产品推荐
相关产品推荐

