Question

So I have been playing around with C# lately and I don't understand output formatting.

using System;

namespace Arrays
{
    class Program
    {
        static void Main()
        {
            Random r = new Random();

            int[] Numbers = new int[10];
            for (int i = 0; i < Numbers.Length; i++)
            {
                Numbers[i] = r.Next(101);
            }

            for (int i = 0; i < Numbers.Length; i++)
            {
                Console.WriteLine("index {0} holds number {0}", i,Numbers[i]);
            }
        }
    }
}

Output Code

My expected output was index i holds number Number[i]. So can anyone explain what to change, or link me with a good C# page on output formatting topic. I know there is a way to do it in 2 lines.

Was it helpful?

Solution

Change

Console.WriteLine("index {0} holds number {0}", i, Numbers[i]);

to

Console.WriteLine("index {0} holds number {1}", i, Numbers[i]);

Reason: Your indices (in the format string) reference the parameters after the string in zero-based index order. So {0} for the first parameter after the string, {1} for the second, {2} if you have a third etc.

See this page for more info.

edit: You can reference the parameters multiple times in your format String, too. E.g.:

Console.WriteLine(
    "index {0} holds number {1} (Numbers[{0}] == {1})", i, Numbers[i]);

This also is equivalent to

Console.WriteLine(String.Format(
    "index {0} holds number {1} (Numbers[{0}] == {1})", i, Numbers[i]));

OTHER TIPS

Console.WriteLine("index {0} holds number {1}", i, Numbers[i] );

Your second print is wrong. You use string.Format but you don't bind the second parameter.

It should be:

Console.WriteLine( "index {0} holds number {1}", i, Numbers[i] );
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top