2

特定の配列に割り当てた数値の配列を印刷しようとしています。数値を選択するための私のアルゴリズムは、重複していない乱数を選択し、それを配列内に格納することで構成されています。

本当に単純ですが、なぜこのエラーが出力されるのかわかりません。

int[] ticket1 = new int[4];
for (int i = 0; i < 4; i++)
{
    int temp = rand.Next(43);
    while (ticket1.Contains(temp)) 
    {
        temp = rand.Next(43);
    }
    ticket1[i] = temp;
}
Console.WriteLine("{0}{1}", item.PadRight(20), ticket1.ToString());//ticket1 produces System.Int32[] instead of 4 numbers.
//I have changed this line to:
//Console.WriteLine("{0}{1}", item.PadRight(20), string.Join(",", ticket1));
//And it still doesn't work. the error remains. (System.Int32[])

私の質問は、どうすれば 4 つの数字を (横に並べて) 文字列形式で出力できるかということです。

//編集:問題が見つかりました。ticket1 を foreach ループ内に配置していますが、どういうわけか配列値に到達していないため、代わりに System.Int32[] を出力します。

すべて修正。

4

4 に答える 4

4

ToString()そのような配列を呼び出すと、クラスの型の完全な名前が得られます。

いくつかの方法で修正できます。ループ内で現在の項目のみを印刷するか、ループ外で各項目を一度に 1 つずつ印刷します。

Console.WriteLine("{0}{1}", item.PadRight(20), ticket1[0]);
Console.WriteLine("{0}{1}", item.PadRight(20), ticket1[1]);
// etc...

または、印刷する前にコレクションを「平坦化」します。

Console.WriteLine("My numbers: ", String.Join(", ", ticket1));
于 2015-06-13T12:08:48.633 に答える
4

ticket1.ToString()配列の内容は出力せず、その型のみを出力します。これは、ToString()メソッドが配列に実装される方法であるためです。

これは、いくつかの方法で修正できます。たとえば、次のstring.Joinメソッドを使用します。

Console.WriteLine("{0}{1}", item.PadRight(20), string.Join(",", ticket1));
于 2015-06-13T12:08:54.653 に答える
2

配列要素を記述していないため、配列自体を記述しているため、ToString()完全な型名が生成されます。

ループ内でticket1.ToString()toを変更ticket1[i]します。for

for (int i = 0; i < 4; i++)
{
     int temp = rand.Next(43);
     while (ticket1.Contains(temp))
     {
         temp = rand.Next(43);
     }
     ticket1[i] = temp;
     Console.WriteLine("{0} {1}", item.PadRight(20), ticket1[i]);
}

forループ内で出力したくない場合はString.Join、配列内のすべての要素を次のような単純な文字列に連結するために使用できます。

for (int i = 0; i < 4; i++)
{
     int temp = rand.Next(43);
     while (ticket1.Contains(temp))
     {
         temp = rand.Next(43);
     }
     ticket1[i] = temp;
}
Console.WriteLine("{0} {1}", item.PadRight(20), string.Join(",", ticket1));
于 2015-06-13T12:08:22.287 に答える