C#中的模式不知道如何创建

时间:2019-05-22 04:25:06

标签: c#

我需要在C#上创建此特定形状的帮助

链接到形状为https://drive.google.com/file/d/1-5xzVHPm8xG4wvkcGgtZ4IBx2uSgwS4u/view?usp=sharing的图像

我已经尝试制作这种形状很长时间了,但是似乎无法正确地制作出我目前刚刚编码的相同图案的两次连续打印的代码。

 using System;
 namespace Patterns   
 {  
 class Program  
 {  
 static void Main(string[] args)  
 {  
   int i, j, k;  
   for (i = 1; i <= 5; i++)  
   {  
     for (j = 1; j <= 6 - i; j++)  
     {  
       Console.Write("*");  
     }  
     for (k = 1; k < i; k++)  
     {  
       Console.Write(" ");  
     }  
     for (j = 1; j <= 6 - i; j++)  
     {  
       Console.Write("*");  
     }  
     Console.Write("\n");  
   }  
   for (i = 2; i <= 5; i++)  
   {  
     for (j = 1; j <= i; j++)  
     {  
       Console.Write("*");  
     }  
     for (k = 1; k <= 5 - i; k++)  
     {  
       Console.Write(" ");  
     }  
     for (j = 1; j <= i; j++)  
     {  
       Console.Write("*");  
     }  
     Console.WriteLine();  
   }      
 }  
 }  
 }

3 个答案:

答案 0 :(得分:1)

哇,那是一大堆不可读的代码:)我想我们需要简化一下:

int numOfStars = 5;
int numOfSpace = 2;


while(numOfStars > 0){
  Console.Write(new string('*', numOfStars));
  Console.Write(new string(' ', numOfSpace));
  Console.WriteLine(new string('*', numOfStars));
  numOfStars--;
  numOfSpace+=2;
}

numOfStars = 2;
numOfSpace = 8;

while(numOfStars < 6){
  Console.Write(new string('*', numOfStars));
  Console.Write(new string(' ', numOfSpace));
  Console.WriteLine(new string('*', numOfStars));
  numOfStars++;
  numOfSpace-=2;
}

模式是一百种不同的方法,这里的对象课程是:

  • 很好地命名-当一个开发人员来“维护”您的代码时,我看着它,并想:“呃;我什至不愿意去理解它,我只会删除它并重新开始”
  • 让您的代码通过编写方式描述其功能-我的代码实际上不需要任何注释;唯一不太明显的技巧是该字符串具有一个构造函数,该构造函数接受一个char和一个int并生成一个字符串,该字符串的char重复了该次数
  • 尽可能使用使生活更轻松的东西,例如构造函数
  • 不要太聪明;我考虑过要利用数学关系来确定一行上总是有12个字符,将恒星数计算为(12-spaces / 2),输出两次la la,甚至为step添加一个变量,以便可以使用一个循环,在中途绕过增量方向..但后来我想到了“为什么要增加复杂性?”。永远不要混淆简短和清晰之间的区别-仅仅因为使用更少的代码行并不能使它们更容易理解

答案 1 :(得分:1)

这是另一种做到这一点的方法:

public static void DrawShape(int maxStars)
{
    int lineLength = maxStars * 2 + 2;

    for (int row = 0; row < lineLength - 1; row++)
    {
        int starCount = maxStars - row;
        if (starCount == 0 || starCount == -1) continue;  // This is the hackey line
        if (starCount < 0) starCount *= -1;

        int spaceCount = lineLength - starCount * 2;

        string stars = new string('*', starCount);
        string spaces = new string(' ', spaceCount);

        Console.WriteLine(stars + spaces + stars);
    }
}

答案 2 :(得分:1)

暴力手段。一种简单的方法,它带有两个参数,一个用于一行上的空格数,第二个参数用于编写“ *”字符数……

 private static void WriteCharacters(int numSpaces, int numChars) {
  Console.Write(new string('*', numChars));
  Console.Write(new string(' ', numSpaces));
  Console.Write(new string('*', numChars));
  Console.WriteLine();
}

然后,写下所有九行...

static void Main(string[] args) {
  WriteCharacters(2, 5);
  WriteCharacters(4, 4);
  WriteCharacters(6, 3);
  WriteCharacters(8, 2);
  WriteCharacters(10, 1);
  WriteCharacters(8, 2);
  WriteCharacters(6, 3);
  WriteCharacters(4, 4);
  WriteCharacters(2, 5);
  Console.ReadKey();
}