For personal reasons I’ve not been very active in the last week or so. Therefore the solution I promised has been a bit late in coming.
Here is the “reference solution” for the simple challenge that I set last week. It is by no means the only solution, nor is it necessarily the best solution (depending on how you define “best”)
class Program
{
private static void Main(string[] args)
{
Console.Write("Width:");
int width = Convert.ToInt32(Console.ReadLine());
Console.Write("Height:");
int height = Convert.ToInt32(Console.ReadLine());
DrawBox(width, height);
Console.ReadLine();
}
private static void DrawBox(int width, int height)
{
// Work out the interior width and height (i.e. the width
// and height of the space inside the box)
int interiorWidth = width - 2;
int interiorHeight = height - 2;
// Work out what the top and bottom of the box should look like
string topAndBottom = new string('*', width);
// Work out what the interior rows should look like
string interiorRow = string.Concat(
"*", new string(' ', interiorWidth), "*", Environment.NewLine);
// Work out the entire interior using the "trick" of defining
// a string with a repeating character for as many rows as the
// interior needs to be, then replacing each of those characters
// with the pattern for a row of the interior.
string interior = new string('-', interiorHeight);
interior = interior.Replace("-", interiorRow);
// Write the box to the console.
Console.WriteLine(topAndBottom);
Console.Write(interior);
Console.WriteLine(topAndBottom);
}
}
