[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