控制台应用程序中的Starpattern

时间:2014-12-16 14:43:45

标签: c#

我需要创建以下模式: http://puu.sh/dx3fN/500f5ee468.png

这是作业,这个问题我第一次失败了。 我现在读到我应该只使用" *"有一次,但在这种情况下,这甚至会如何运作? 如果有人能给我一些关于如何思考的见解,我将不胜感激。

我的代码如下:

using System;
class StarPattern
{
    public static void Main()
    {
        for (int i = 0; i < 5; i++)
        {
            Console.Write("*");
        }
        for (int a = 0; a <= 0; a++)
        {
            Console.WriteLine("");
            Console.Write("*");
        }
        for (int c = 0; c <= 0; c++)
        {
            Console.WriteLine("   *");
        }
        for (int d = 0; d <= 1; d++ )
        {
            Console.Write("*");
            Console.WriteLine("   *");
        }
        for (int e = 0; e < 5; e++ )
        {
            Console.Write("*");
        }
        Console.ReadLine();
    }                 
}

5 个答案:

答案 0 :(得分:11)

您可以通过嵌套循环来简化代码,以便外部(i)=行和内部(j)=列。从查看样本开始,如果您处于两者的边界,则需要写出来,这样您就可以添加一个条件,只需写出最小值和最大值。

private static void Main(string[] args)
{
    for (int i = 0; i <= 4; i++)
    {
        for (int j = 0; j <= 4; j++)
        {
            if (i == 0 || i == 4 || j == 0 || j == 4)
            {
                Console.Write("*");
            }
            else
            {
                Console.Write(" ");
            }
        }
        Console.WriteLine();
    }
    Console.ReadKey();
}

我可能用一个名为MIN的常数替换0,用一个名为MAX的常量替换4以保存重复它们。这样,您只需更改常量即可增加正方形的大小。

答案 1 :(得分:5)

几乎没有人会为你评论他们的代码。多么令人失望!

这里的诀窍是专注于重要的事情,并定义你将要的价值观;

  1. 在代码中多次使用
  2. 如果需要需要推文,只想更改一次
  3. 这些值是高度宽度 - 矩形的核心组件。

    图案的黄金法则是:如果每个字符的行和列位于正方形的边缘,请打印*

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Stars
    {
        class Program
        {
            static int Width = 5; //define the width of the square in characters
            static int Height = 5; //define the height of the square in characters
    
            static void Main(string[] args)
            {
                for (int row = 0; row <= Height; row++) //Each iteration here is one row.
                {
                    //loop representing columns. This is NESTED within the rows so 
                    //that each row prints more than one column
                    for (int column = 0; column <= Width; column++)
                    {
                        if (IsCentreOfSquare(row, column)) //calculate if the current row and column coordinates are the interior of the square
                        {
                            Console.Write(" ");
                        }
                        else
                        {
                            Console.Write("*");
                        }
                    }
                    Console.WriteLine(); //this row is over. move to the next row
                }
                Console.ReadLine(); //pause so that the user can admire the pretty picture.
            }
    
            /// <summary>
            /// Calculates if the row and column indexes specified are in the interior of the square pattern
            /// </summary>
            /// <returns></returns>
            private static bool IsCentreOfSquare(int row, int col)
            {
                if (row > 0 && row < Height)
                {
                    if (col > 0 && col < Width)
                    {
                        return true;
                    }
                }
    
                return false;
            }
        }
    }
    

答案 2 :(得分:1)

这对于这样一个简单的程序来说可能有些过分,但要使其可扩展并添加一些const int以使设计能够随时修改! 好问题。觉得我再次辅导很有趣!很高兴看到你至少给了它一个诚实的尝试:)

class Program
{
    // Use string if you are okay with breaking the current pattern.
    // private static string myDesign = "*";
    // Use char if you want to ensure the integrity of your pattern.
    private static char myDesign = '*';
    private const int COLUMN_COUNT = 5;
    private const int ROW_COUNT = 5;
    private const int FIRST_ROW = 0;
    private const int LAST_ROW = 4;
    private const int FIRST_COLUMN = 0;
    private const int LAST_COLUMN = 4;
    static void Main(string[] args)
    {
        // Iterate through the desired amount of rows.
        for (int row = 0; row < ROW_COUNT; row++)
        {
            // Iterate through the desired amount of columns.
            for (int column = 0; column < COLUMN_COUNT; column++)
            {
                // If it is your first or last column or row, then write your character.
                if (column == FIRST_COLUMN || column == LAST_COLUMN || row == FIRST_ROW || row == LAST_ROW)
                {
                    Console.Write(myDesign);
                }
                // If anywhere in between provide your blank character.
                else
                {
                    Console.Write(" ");
                }
            }
            Console.WriteLine("");
        }
        Console.Read();
    }
}

答案 3 :(得分:1)

这并不困难。您需要创建两个循环:一个用于行,一个用于列,然后确定是否打印星形。只有第一行和最后一行和列有一个星号。

在我的例子中,我使用了两个从0开始并计数到4的计数器。如果任一计数器值的余数除以4等于0,那么我打印一个星号,否则为空格。

using System;

namespace Stars
{
  internal static class StarPattern
  {
    private static void Main()
    {
      for (int i = 0; i < 5; i++)
      {
        for (int j = 0; j < 5; j++)
        {
          Console.Write((i%4 == 0) | (j%4 == 0) ? '*' : ' ');
        }
        Console.WriteLine();
      }
    }
  }
}

答案 4 :(得分:0)

您需要打印一定数量的行,每行有一定数量的字符。

一种方法是创建或查找打印所需字符序列的方法。然后创建一个方法来调用它的调用。最后,打印出所有结果。

private void PrintBox(char c, int width, int height)
{
    var result = new List<string>();
    result.Add(new string(c, width)); // First line

    for (var i = 0; i < height - 2; i++)
    {
        string iLine;
        int spaceCount = width - 2;
        iLine = new string(c, 1) + new string(' ', spaceCount) + new string(c, 1);
        result.Add(iLine);
    }

    result.Add(new string(c, width)); // Last line

    // FYI, there's a StringBuilder class that makes all this easier

    foreach (var line in result)
    {
        Console.WriteLine(line);
    }
}

这里重要的OOP概念是我们使用单个可重用的方法来构造一个字符序列 - 新字符串(char,int)。如果我们想创建一个Circle,我们可以基于相同的原理创建一个BuildCircle方法。