用星号绘制n个边长为m的正方形的C#代码问题求助
需求与问题描述
需按照指定格式绘制n个边长为m的正方形。示例:当m=5、n=2时,预期输出如下:
* * * * * * * * * * * * * * * * * * * * * * * * *
本人编写了如下C#代码,但未达到预期效果:
Console.Write("Enter the value of m (side length): "); int m = int.Parse(Console.ReadLine()); Console.Write("Enter the value of n (number of squares): "); int n = int.Parse(Console.ReadLine()); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { for (int k = 0; k < m; k++) { Console.Write("* "); } Console.WriteLine(); } Console.WriteLine(); }
修正后的代码
Console.Write("Enter the value of m (side length): "); int m = int.Parse(Console.ReadLine()); Console.Write("Enter the value of n (number of squares): "); int n = int.Parse(Console.ReadLine()); // 控制输出的总行数,等于单个正方形的边长 for (int row = 0; row < m; row++) { // 依次输出每个正方形的当前行内容 for (int squareCount = 0; squareCount < n; squareCount++) { if (row == 0 || row == m - 1) { // 边框行:输出m个带空格的星号 for (int col = 0; col < m; col++) { Console.Write("* "); } } else { // 中间行:开头星号 + 中间空格 + 结尾星号 Console.Write("* "); for (int col = 0; col < m - 2; col++) { Console.Write(" "); } Console.Write("* "); } } // 每行结束换行 Console.WriteLine(); }
代码说明
- 原代码错误地将n个正方形垂直堆叠输出,而需求是水平并排绘制。
- 修正逻辑:
- 外层循环控制输出行数,总数等于单个正方形的边长m;
- 每行内循环遍历n个正方形,分别输出每个正方形的对应行:
- 若为正方形的第一行或最后一行(边框行),直接输出m个
*; - 若为中间行,输出开头的
*,接着填充m-2组空格(每组两个空格,匹配*的字符长度),最后输出结尾的*;
- 若为正方形的第一行或最后一行(边框行),直接输出m个
- 所有正方形的当前行内容输出完成后,换行进入下一行。
内容的提问来源于stack exchange,提问作者Sasho
相关产品推荐
相关产品推荐

