2013-11-20 8 views
6

So habe ich in letzter Zeit herum mit C# gespielt und ich verstehe nicht Ausgabeformatierung.Einfache C# Ausgabe

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]); 
      } 
     } 
    } 
} 

Ausgabe Code

war meine erwartete Ausgabe index i holds number Number[i]. Kann mir jemand erklären, was geändert werden soll, oder verlinke mich mit einer guten C# -Seite zum Thema Ausgabeformatierung. Ich weiß, es gibt eine Möglichkeit, es in 2 Zeilen zu tun.

Antwort

20

ändern

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

zu

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

Grund: Ihre Indizes (im String-Format) verweisen die Parameter nach dem String in nullbasierten Index Reihenfolge. Also {0} für den ersten Parameter nach der Zeichenkette, {1} für die zweite, {2} wenn Sie eine dritte haben usw.

Weitere Informationen finden Sie unter this page.

bearbeiten: Sie können die Parameter auch mehrfach in Ihrem Format String referenzieren. Z.B .:

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

Dies gilt auch für

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

Oh, seltsam ... Ich dachte, die {0} wurde in Java ein Platzhalter für Zahlen, wie% d. –

+1

@destroyergm Nein, die Funktion String.Format ruft bei jedem Parameter automatisch 'ToString()' auf. Also ist der Typ irrelevant. edit: obwohl der Typ "IFormattable" für einige spezielle Formatzeichenfolgen implementieren könnte. Dennoch bestimmt die Reihenfolge der Parameter ihren Index. –

5

Ihren zweiten Druck ist falsch entspricht. Sie verwenden string.Format, aber Sie binden den zweiten Parameter nicht.

es sein sollte:

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