0

私はC#の初心者で、宝くじのフォームアプリケーションを作成しようとしています。タイプがあります。最初に、5つのヒント(otos bool)と5つのヒント(hatos bool)がある場合です。そして、ラッフルされる数には多くの種類があります(tiz、harminc、kilencven、negyvenot)。Array.Equals私はこのコードでラッフルの後に数字をスキャンしようとしました:

for (int i = 0; i <= 4; i++)
{ 
    for (int y = 0; y <= 4; y++)
    {
        if (Array.Equals(lottoszamok[i], lottoszamok[y]))
            lottoszamok[i] = r.Next (1, ?);
    }
}

ただし、この時点では、数値もそれ自体でスキャンされるため、常に等しくなります。

ちなみに私のコードは次のとおりです。

if (otos == true)
{
    for (int i = 0; i <= 5; i++)
    {
        if (tiz == true)
        {
            lottoszamok[i] = r.Next(1, 10);
        }
        else if (harminc == true)
        {
            lottoszamok[i] = r.Next(1, 30);
        }
        else if (kilencven == true)
        {
            lottoszamok[i] = r.Next(1, 90);
        }
        else if (negyvenot == true)
        {
            lottoszamok[i] = r.Next(1, 45);
        }
        else if (egyeni == true)
        {
            lottoszamok[i] = r.Next(1, (egyeniertek + 1));
        }
    }
}

if (hatos == true)
{
    for (int i = 0; i <= 6; i++)
    {
        if (tiz == true)
        {
            lottoszamok[i] = r.Next(1, 10);
        }
        else if (harminc == true)
        {
            lottoszamok[i] = r.Next(1, 30);

        }
        else if (kilencven == true)
        {
            lottoszamok[i] = r.Next(1, 90);
        }
        else if (negyvenot == true)
        {
            lottoszamok[i] = r.Next(1, 45);
        }
        else if (egyeni == true)
        {
            lottoszamok[i] = r.Next(1, (egyeniertek + 1));
        }
    }
}
4

4 に答える 4

2

1..n 繰り返しのない範囲から数字を選択しようとしている場合は、数字を「シャッフル」する必要があります。

int[] allPossibleNumbers = Enumerable.Range(1, maxNumber).ToArray();
int[] picked = new int[numberToPick];
for (int i = 0; i < numberToPick; i++)
{
    int index = r.Next(i, maxNumber);
    picked[i] = allPossibleNumbers[index];
    allPossibleNumbers[index] = allPossibleNumbers[i];
}

wherenumberToPick5ifotosまたは6ifであり、 、、、、hatosおよびmaxNumberに依存します。tizharminckilencvennegyvenotegyeniegyeniertek

あなたmaxNumberが巨大で、少数の数字だけを選びたい場合、以下は範囲全体を一度にメモリに入れる必要はありません:

Dictionary<int, int> outOfPlace = new Dictionary<int,int>();
int[] picked = new int[numberToPick];
for (int i = 0; i < numberToPick; i++)
{
    int shuffleOut = outOfPlace.ContainsKey(i) ? outOfPlace[i] : i;
    int index = r.Next(i, maxNumber);
    picked[i] = 1 + (outOfPlace.ContainsKey(index) ? outOfPlace[index] : index);
    outOfPlace[index] = shuffleOut;
    outOfPlace.Remove(i);
}
于 2012-10-11T09:29:52.733 に答える
1

これを試してみてください!

if (i!=y && Array.Equals(lottoszamok[i], lottoszamok[y]))
于 2012-10-11T09:29:17.887 に答える
0

私はこのようにしましたが、必要に応じてスワッピングのようなメソッドを入れることができます。

static void SwapInts(int[] array, int position1, int position2)
{
    // Swaps elements in an array.

    int temp = array[position1]; // Copy the first position's element

    array[position1] = array[position2]; // Assign to the second element

    array[position2] = temp; // Assign to the first element
}
static void Main()
{                                                
    Random rng = new Random();

    int n = int.Parse(Console.ReadLine());

    int[] intarray = new int[n];

    for (int i = 0; i < n; i++)
    {
        // Initialize array
        intarray[i] = i + 1;
    }
    // Exchange resultArray[i] with random element in resultArray[i..n-1]
    for (int i = 0; i < n; i++)
    {
        int positionSwapElement1 = i + rng.Next(0, n - i);
        SwapInts(intarray, i, positionSwapElement1);
    }
    for (int i = 0; i < n; i++)
    {
        Console.Write(intarray[i] + " ");
    }
}

}

于 2014-07-30T11:35:23.113 に答える
0

私はこれを得るために多くの時間を費やしましたが、私はそれを行うことができると信じています. . (私の仕事へようこそ) その (BEST OF THE BEST):

重複のない (1-10) の数字、1- C# の MY WORK

private void TenNumbersRandomly()
    {
       int[] a = new int[10];
       Random r = new Random();
       int x;
       for (int i = 0; i < 10; i++)
       {
          x= r.Next(1, 11);
           for (int j = 0; j <= i ; j++)
           {
              while (a[j] == x)
               {
                   x = r.Next(1, 11);
                  j = 0;
               }
           }
           a[i] = x;
           tb1.Text += a[i]+"\n";
       }
    }

2-VBでいくつかの異なる私もそれを持っています:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim x As Integer, i As Integer, j As Integer
    x = Int(Rnd() * 10) + 1
    Label1.Text = ""
    Dim a(9) As Integer
    For i = 0 To 9
        x = Int(Rnd() * 10) + 1
        For j = 0 To i
            While (a(j) = x)
                x = Int(Rnd() * 10) + 1
                j = 0
            End While
        Next j
        a(i) = x
        Label1.Text += a(i).ToString() + "  "
     Next i
于 2013-01-26T22:26:11.983 に答える