如何画一个正方形

时间:2014-03-12 19:46:10

标签: c# console-application

我在绘制以下方格时遇到了麻烦:

* # # # # # 
* * # # # # 
* * * # # # 
* * * * # # 
* * * * * # 
* * * * * *

这是我写的方法,但它不应该正常工作:

public void Draw(int width){
    char asterisk = '*';
    char hash = '#';
    int counter = 0;
    for (int h = 0; h < 6; h++) { //height?
        for (int w = 0; w < width; w++) {
            if (h == counter)
                Console.Write (asterisk);
            else
                Console.Write (hash);
        }
        counter++;

        Console.WriteLine ();
    }
    Console.WriteLine ();
}

关于我应该做什么的任何建议? 我知道,当它是第一行时它应该只绘制一个星号,当它是第二行时两个星号等等,但我真的不知道该怎么做那..请帮忙。

6 个答案:

答案 0 :(得分:5)

您可以将条件从if (h == counter)更改为if (h >= w),而不是使用计数器值。

答案 1 :(得分:3)

使用h == counter

更改w <= counter

此外,您可以删除counter,因为它始终等于h

答案 2 :(得分:1)

为什么你不使用像这样的重复构造函数。

public void Draw(int width){
    int w_counter = 1;

    for (int l = 0; l < 6; l++) {
         var asterisk = new String('*', w_counter);
         var hash = new String('#', width - w_counter);
         Console.WrilteLine(asterisk + hash);
         w_counter++;
    }
}

答案 3 :(得分:1)

本课程旨在教导学生使用嵌套循环,并了解内循环的每个实例都可以访问外循环的状态。不幸的是,大多数老师不明白他们教学的内容,只是给你解决问题而不解释为什么练习是有用的。

因为你总是想要与你所在的行完全相同的星数,所以你应该直接比较列索引和当前行。

public void DrawSquare(int sideLength)
{
  for(int row = 1; row <= sideLength; row++)
  {
     for (int col = 1; col <= sideLength; col++)
     {
       if (col <= row) 
         Console.Write('*');
       else
         Console.Write('#');
     }
     Console.WriteLine();
  }
}

有许多快捷方式和c#技巧可以让你更快,但这是你应该尝试做的事情的本质。

答案 4 :(得分:0)

由于counter始终等于h,因此您将获得所有星号。与行号w相比,行上的字符位置h决定了要打印的字符。因此,将条件更改为w <= h

此外,由于您要打印正方形,因此高度和宽度将具有相等的边长。将方法签名更改为

public void DrawSquare(int sideLength)

然后,两个循环都必须针对sideLength测试循环变量。

答案 5 :(得分:0)

实际上我正在寻找一些不错的算法来编写,所以这里是我的解决方案只有1个for循环:

private static void Draw(int width)
{
   int numOfS = 1;
   string temp = "";
   int numOfH = width-1;
   int t1, t2;
   for (int i = 0; i < width; i++)
   {
       t1 = numOfS;
       t2 = numOfH;
       while (t1 > 0)
       {
         temp += "*";
         t1--;
       }
       while (t2 > 0)
       {
         temp += "#";
         t2--;
       }
       Console.WriteLine(temp);
       numOfH--;
       numOfS++;
       temp = "";
  }
}