0

10 個の一意の乱数を生成して配列に保存しようとしています。
これが私のコードですが、実行時エラーがありますが、方法がわかりません。

誰か助けてくれませんか?

static void Main(string[] args)
    {
        int [] generatedNum = new int[10];
        bool duplicated;
        int tempo;
        Random random = new Random();

        // Create first number
        generatedNum[0] = random.Next(1, 25);      

        for (int i = 1; i < 10; i++)
        {
            tempo = random.Next(0, 25);
            do
            {
                duplicated = false;
                foreach (int x in generatedNum)
                {
                    if (x == tempo)
                        duplicated = true;
                }

                if (duplicated == true)
                tempo = random.Next(0, 25);
            } while (duplicated == true);

            // Save unique number to array
            generatedNum[i] = tempo;

        }

        // To check the number saved
        foreach (int i in generatedNum)
        {
            Console.WriteLine("{0}", generatedNum[i]);
        }

    }
4

7 に答える 7

1

y の配列から x 個の一意のアイテムを取得するには、shuffle bagが必要です。

1 から 25 までの数字を袋に入れ、シャッフルして最初の 10 個を取り出します。1 から 25 までの 10 個のランダムなアイテムが表示されます。

于 2013-04-02T07:04:24.807 に答える
0
    static void Main(string[] args)
    {
        var generatedNum = new List<int>();
        var random = new Random();

        while (generatedNum.Count < 10)
        {
            var tempo = random.Next(0, 25);

            if (generatedNum.Contains(tempo)) continue;
            generatedNum.Add(tempo);
        }

        foreach (var i in generatedNum)
        {
            Console.WriteLine("{0}", i);
        }
    }

そして、あなたの問題はここにありませんでしたか?

    // To check the number saved
    foreach (int i in generatedNum)
    {
        Console.WriteLine("{0}", generatedNum[i]);
    }
于 2013-04-02T07:04:23.027 に答える
0

最後のforeachループは無効です。iインデックスではなく値なので、直接書くことができます:

// To check the number saved
foreach (int i in generatedNum)
{
    Console.WriteLine("{0}", i);
}
于 2013-04-02T06:55:51.577 に答える
0

変化する

 foreach (int i in generatedNum)
        {
            Console.WriteLine("{0}", generatedNum[i]);
        }

 for (int j=0;j<generatedNum.Length;j++)
        {
            Console.WriteLine("{0}", generatedNum[j]);
        }
于 2013-04-02T06:56:52.350 に答える
0

これは機能しますか

Linqの使用が許可されている場合は、次のようなことを試すことができます

好きな範囲を設定できる

  Random rnd = new Random();
        var randomNumbers = Enumerable.Range(1, 100)
                                      .Select(x => new { val = x, order = rnd.Next() })
                                      .OrderBy(i => i.order)
                                      .Select(x => x.val)
                                      .Take(10).ToArray();
于 2013-04-02T07:41:55.827 に答える