public void Write(TextWriter textWriter, MultiplicationTable multiplicationTable) { int maxNumber = multiplicationTable[multiplicationTable.Header.Length - 1, multiplicationTable.Header.Length - 1]; int width = maxNumber.ToString().Length; var header = new[] { "" }.Concat(multiplicationTable.Header.Select(x => x.ToString())).Select(x => x.PadLeft(width)); textWriter.WriteLine("| {0} |", string.Join(" | ", header)); textWriter.WriteLine("| {0} |", string.Join(" | ", Enumerable.Range(0, multiplicationTable.Header.Length + 1).Select(i => "".PadLeft(width, '-')))); for (int i = 0; i < multiplicationTable.Header.Length; i++) { var rowNumber = new[] { multiplicationTable.Header[i] }.Concat(multiplicationTable.Header.Select((x, j) => multiplicationTable[i, j])); textWriter.WriteLine("| {0} |", string.Join(" | ", rowNumber.Select(x => x.ToString().PadLeft(width)))); } }
static void Main(string[] args) { Console.Write("How many prime number do you want to generate: "); string numberText = Console.ReadLine(); int number; while (!int.TryParse(numberText, out number) || number < 1) { Console.Write("Invalid format or incorrect number. Try again: "); numberText = Console.ReadLine(); } var generator = new PrimeNumberGenerator(); var table = new MultiplicationTable(generator.Generate().Take(Math.Min(10, number)).ToArray()); var writer = new MultiplicationTableWriter(); writer.Write(Console.Out, table); Console.Read(); }