swift2 - Swift - random number (min - max) avoiding repetition -


i have function generate integer random number between 2 given values. function in app called 2 times however, want avoid generates 2 same numbers or 2 number next each other. how fix function below achieve that?

example result:

1, 1 = wrong 1, 2 = wrong 8, 7 = wrong  8, 12 = correct 1, 3 = correct 3, 0 = correct 

function:

func randomnumber(minx:uint32, maxx:uint32) -> int {         let result = (arc4random() % (maxx - minx + 1)) + minx         return int(result)     } 

edit: how can duplicate??? not asking shuffle array want generate single int 2 given numbers

you said "i want avoid ... 2 numbers next each other" don't understand how 8 ,7 wrong 8, 9 correct.

anyhow, answer answer based on example. send previous value , loop until satisfactory asnwer:

func randomnumber(minx:uint32, maxx:uint32, previousnumber: int? = nil) -> int {     var result: int      repeat {         result = int((arc4random() % (maxx - minx + 1)) + minx)     } while previousnumber == result || previousnumber == result + 1      return result } let r1 = randomnumber(1, maxx: 3) let r2 = randomnumber(1, maxx: 3, previousnumber: r1) 

this lead infinite loop when there's no number can satisfy conditions, example:

randonnumber(1, maxx: 2, previousnumber: 2) 

you should add guard statement working out possibility mathematically , create counter repeat loop ends after, 100 iterations.


Comments