[Gambas-user] A random sort of listview

Simonart Dominique simonart.dominique at ...11...
Tue Apr 7 23:12:56 CEST 2009


Hi,

jbskaggs a écrit :
> Okay,
> 
> But why does it do that?  I don't see why the direction should matter what
> am I missing ?  Becuase maybe this is something that has plagued me and
> caused me headaches for a while.
> 
> JB Skaggs
> 

You're right! Thanks!
My mistake is that I listed the myArray values inside the 
SAME for next loop that the swap! But of course, the values 
could change at each next step

However, there is differences. Let see a step by step sample

CASE 1: Forward FOR NEXT loop

* i=0 -> Int(Rnd(i+1)) = 0!
you could affect only myArray[0] to myArray[0]
* i=1 -> Int(Rnd(i+1)) = 0-1
you could affect myArray[0] once more
* i=2 -> Inn(Rnd(i+1)) = 0-2
idem
* i=3 ...
at each step, ALWAYS you could affect an already selected value

CASE 2: Backward FOR NEXT loop

* i=199 -> Int(Rnd(i+1)) = 0-199
myArray[199] could be any value
* i=198 -> Int(Rnd(i+1)) = 0-198
myArray[198] could be any of the non selected values
myArray[199] will never be affected anymore
* i=197 ...
at each step, NEVER you could affect an already selected value

I found the second case more satisfying for my mind! :)

Hope this send your headache away! :)
Dominique Simonart
> 
> 
> 
> Simonart Dominique wrote:
>> Hi,
>>
>> jbskaggs a écrit :
>>> When I ran the code it ran fine- why is it important to have it  count
>>> backwards in the random swap?
>>>
>>> ie for i =199 to 0 step -1 instead of for i=0 to 199 step 1?
>>>
>>> JB SKaggs
>>>
>> Strange, because it should not  :)
>> run a test with 10 numbers 0-9 and fixe the seed with 
>> RANDOMIZE 12345
>> If you run the forward FOR NEXT you will get:
>> 0 0 2 3 1 1 2 6 3 8
>> which is wrong!
>> but if you run the backward FOR NEXT you will get:
>> 5 1 9 6 0 3 8 7 2 4
>> which is right!
>>
>> May be you did not notice it because 200 is long enough 
>> before you get the same number twice, and before you remark 
>> that some are missing?
>>
>> Dominique Simonart
>>
>>> Simonart Dominique wrote:
>>>> Hi,
>>>>
>>>> Hmm, did you run exactly this code? If so, there is 
>>>> something wrong with the second FOR NEXT loop
>>>>
>>>> jbskaggs a écrit :
>>>>> using your suggestions and the swap command vs manual swapping this is
>>>>> my
>>>>> code:
>>>>>
>>>>> public b as string  'optional string used to hold the array data for
>>>>> file
>>>>> or
>>>>> split later
>>>>>
>>>>> PUBLIC SUB button4_click() ' initialize array
>>>>> DIM myArray AS Integer[200]
>>>>> DIM a AS Integer
>>>>> DIM i AS Integer
>>>>>
>>>>> FOR i = 0 TO 199 STEP 1 'add array items 
>>>>>  myArray[i] = i 
>>>>> NEXT 
>>>>>
>>>>> FOR i = 0 TO 199 STEP 1 ' random swap array items
>>>>> a = Int(Rnd(i + 1))
>>>>> SWAP myArray[i], myArray[a]
>>>>> NEXT 
>>>>>
>>>> the right code is:
>>>>
>>>> FOR i = 199 TO 0 STEP -1
>>>>     ...
>>>> NEXT
>>>>
>>>>> FOR i = 0 TO 199 STEP 1 ' write items in listview2
>>>>> listview1.MoveTo(myArray[i])
>>>>> c = listview1.Item.Key
>>>>> listview2.add(c, listview1.item.text) 
>>>>> NEXT 
>>>>>
>>>>>
>>>>>
>>>>> FOR i = 0 TO 199 STEP 1 'optional step to write array as a string for
>>>>> file
>>>>> or whatever use
>>>>> b &= "slot" & myArray[i] & ","
>>>>> NEXT 
>>>>> PRINT b
>>>>> END
>>>>>
>>>>> PUBLIC SUB Button1_Click() 'an optional way to load the array values
>>>>> from
>>>>> the variable b and / or a file if b was file loaded
>>>>> DIM egg AS String[]
>>>>> DIM c AS String
>>>>>  listview1.Clear
>>>>>  egg = Split(b, ",")
>>>>>  FOR EACH c IN egg 
>>>>> TRY listview1.Add(c, c) 
>>>>> IF ERROR THEN RETURN 
>>>>> NEXT 
>>>>> IF listview1.Count >= 200 THEN RETURN 
>>>>> END
>>>>>
>>>>> JB Skaggs
>>>>>
>>>> Dominique Simonart
>>>>
>> Dominique Simonart
>>
>>
>> ------------------------------------------------------------------------------
>> This SF.net email is sponsored by:
>> High Quality Requirements in a Collaborative Environment.
>> Download a free trial of Rational Requirements Composer Now!
>> http://p.sf.net/sfu/www-ibm-com
>> _______________________________________________
>> Gambas-user mailing list
>> Gambas-user at lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/gambas-user
>>
>>
> 






More information about the User mailing list