0

Hey Guys i know this Question was asked before but I'm not able to find the right Solution for my Problem. I have a Method "GenerateLottoSchein()" which creates a new Instance of an ArrayList and fill it with a for Loop which calls another Method "GenerateLottoFieldWithSmallNumbers()" this Method returns an Array each time its called. I allways get the same array in this ArrayList but when im debugging it is working fine, that irritates me also.

public int[] GenerateLottoFieldWithSmallNumbers(int firstNumber, int secondNumber, int thirdNumber)
    {
        int[] currentLottoField = new int[6];
        var random = new Random();
        int randomNumber = random.Next(1, 30);

        currentLottoField[0] = firstNumber;
        currentLottoField[1] = secondNumber;
        currentLottoField[2] = thirdNumber;

        if (randomNumber != firstNumber && randomNumber != secondNumber && randomNumber != thirdNumber)
        {
            currentLottoField[3] = randomNumber;
        }
        randomNumber = random.Next(1, 30);
        if (randomNumber != firstNumber && randomNumber != secondNumber && randomNumber != thirdNumber && randomNumber != currentLottoField[3])
        {
            currentLottoField[4] = randomNumber;
        }
        randomNumber = random.Next(1, 30);
        if (randomNumber != firstNumber && randomNumber != secondNumber && randomNumber != thirdNumber && randomNumber != currentLottoField[3] && randomNumber != currentLottoField[4])
        {
            currentLottoField[5] = randomNumber;
        }

        Array.Sort(currentLottoField);

        return currentLottoField;
    }


    public ArrayList GenerateLottoSchein()
    {
        ArrayList twelveLottoFields = new ArrayList();

        for (int i = 0; i < 12; i++)
        {
            int[] oneField = new int[6];

            oneField = GenerateLottoFieldWithSmallNumbers(4, 13, 24);
            twelveLottoFields.Add(oneField);
        }
        return twelveLottoFields;
    }
nullinger
  • 1
  • 2
  • 1
    You are calling `new Random` in a tight loop, so each time will almost certainly get the same seed (clock time). When you debug, you slow things down so get different seeds. Maybe pass in a random number generator to the generator, so you can ise the same one, seeded once, elsewhere? – doctorlove Dec 29 '21 at 11:13

1 Answers1

1

remove random into GenerateLottoSchein

public ArrayList GenerateLottoSchein()
    {
        ArrayList twelveLottoFields = new ArrayList();

          var random = new Random();

        for (int i = 0; i < 12; i++)
        {
            int[] oneField = new int[6];

            oneField = GenerateLottoFieldWithSmallNumbers(random, 4, 13, 24);
            twelveLottoFields.Add(oneField);
        }
        return twelveLottoFields;
    }


public int[] GenerateLottoFieldWithSmallNumbers(Random random, int firstNumber, int secondNumber, int thirdNumber)

Serge
  • 40,935
  • 4
  • 18
  • 45