smallbasic

Random Numbers in array, Small Basic


I'm trying to generate an array which would have ten variables, each containing a random number from 1 to 10. The random integer can not be in the array more than once. Each time the program would execute, the array would be reset with different numbers. For example, in English, what I would like is essentially:

randint[1] = random number <= 10 and >= 1
randint[2] = random number <= 10 and >= 1 and <> randint[1]
randint[3] = random number <= 10 and >= 1 and <>  randint[2]
randint[4] = random number <= 10 and >= 1 and <>  randint[3]
randint[5] = random number <= 10 and >= 1 and <>  randint[4]
randint[6] = random number <= 10 and >= 1 and <>  randint[5]
randint[7] = random number <= 10 and >= 1 and <>  randint[6]
randint[8] = random number <= 10 and >= 1 and <>  randint[7]
randint[9] = random number <= 10 and >= 1 and <>  randint[8]
randint[10] = random number <= 10 and >= 1 and <>  randint[9]

Simply, I am trying to sort the numbers 1 to 10 in a random order in an array.

So far my code is as follows:

For i = 1 To 10
  While rand_int[i] = prev_int
    rand_int[i] = Math.GetRandomNumber(9)+1
    prev_int = rand_int[i]
  EndWhile
EndFor

I have also tried instead

rand_int[1] = Math.GetRandomNumber(9)+1

for i = 2 To 10
  rand_int[i] = Math.GetRandomNumber(9)+1
  While rand_int[i] = rand_int[i-1]
    rand_int[i] = Math.GetRandomNumber(9)+1
  EndWhile
EndFor

Any assistance would be greatly appreciated, Thanks.


Solution

  • Boom! Got it figured out. I created an array of numbers, that counted from one to ten, and then I scrambled the order of the numbers:

    For i = 1 To 10
      Randint[i] = i
    EndFor
    
    For i = 1 To 30 'The Larger the number, the more it scrambles the order
      Rand1 = Math.GetRandomNumber(10)
      Rand2 = Math.GetRandomNumber(10)
      OldRandint = Randint[Rand1] 
      Randint[Rand1] = Randint[Rand2] 'Here we are swapping two random varibles in the array
      Randint[Rand2] = OldRandint
    EndFor
    
    For i = 1 To 10
      TextWindow.WriteLine(Randint[i])
    EndFor