Archief - Random toch niet random?

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

blub

Legacy Member
Hallo

Ik ben begonnen met de beginselen van programmeren in android.
Nu heb ik een via een tutorial een kleine app geschreven, maar hij reageert anders op mijn tablet dan in de emulator of een android gsm..

De ventjes moeten op een random plaats beginnen in een random richting en random snelheid.
Nu is het probleem dat op mijn tablet (Galaxy Tab, Android 2.2) de ventjes niet op 12 verschillende plaatsen komen (er zijn 12 ventjes) maar ze verschijnen per soms per 3 of 4 op elkaar, in dezelfde richting.. Terwijl ze op mijn emulator en op een android gsm wel alle 12 in aparte plaats en richting bewegen. Zowel op 2.1 als 2.2, maar bij mijn tab blijven ze per 2-3-4 lopen..

Code:
x = rnd.nextInt(gameView.getWidth() - width);
y = rnd.nextInt(gameView.getHeight() - height);
xSpeed = rnd.nextInt(30) - 5;
ySpeed = rnd.nextInt(30) - 5;

Dit is de code voor de plaats en richting waarin ze bewegen, dus ik weet niet goed waarom het op mijn galaxy tab alles behalve random gebeurt..
Iemand een idee?

pietje666

Legacy Member
blub zei:
Hallo

Ik ben begonnen met de beginselen van programmeren in android.
Nu heb ik een via een tutorial een kleine app geschreven, maar hij reageert anders op mijn tablet dan in de emulator of een android gsm..

De ventjes moeten op een random plaats beginnen in een random richting en random snelheid.
Nu is het probleem dat op mijn tablet (Galaxy Tab, Android 2.2) de ventjes niet op 12 verschillende plaatsen komen (er zijn 12 ventjes) maar ze verschijnen per soms per 3 of 4 op elkaar, in dezelfde richting.. Terwijl ze op mijn emulator en op een android gsm wel alle 12 in aparte plaats en richting bewegen. Zowel op 2.1 als 2.2, maar bij mijn tab blijven ze per 2-3-4 lopen..

Code:
x = rnd.nextInt(gameView.getWidth() - width);
y = rnd.nextInt(gameView.getHeight() - height);
xSpeed = rnd.nextInt(30) - 5;
ySpeed = rnd.nextInt(30) - 5;

Dit is de code voor de plaats en richting waarin ze bewegen, dus ik weet niet goed waarom het op mijn galaxy tab alles behalve random gebeurt..
Iemand een idee?

definieer uw random variabele is als static

blub

Legacy Member
pietje666 zei:
definieer uw random variabele is als static

Nu komen ze allemaal op een hoopje, net achter elkaar..
Het omgekeerde effect dus.
Wa gaat die static net veranderen aan hoe die randomvariabele zich voordoet?

Tyfius

Legacy Member
Wanneer je een random variabele aanmaakt wordt de interne klok gebruikt om de seed te initialiseren. Als je dat binnen eenzelfde loop doet kan dit inderdaad geen random numbers opleveren.

Een aantal interessante posts:

System.Random (and java.util.Random) - Jon Skeet: Coding Blog
https://msmvps.com/blogs/jon_skeet/archive/2009/11/04/revisiting-randomness.aspx
Vanilla #Java: Randomly not so random
Java: Can (new Random()).nextInt(5) always return the same number? - Stack Overflow
Generating random numbers in Java

Vin

Legacy Member
Tyfius zei:
Wanneer je een random variabele aanmaakt wordt de interne klok gebruikt om de seed te initialiseren. Als je dat binnen eenzelfde loop doet kan dit inderdaad geen random numbers opleveren.

Een aantal interessante posts:

System.Random (and java.util.Random) - Jon Skeet: Coding Blog
https://msmvps.com/blogs/jon_skeet/archive/2009/11/04/revisiting-randomness.aspx
Vanilla #Java: Randomly not so random
Java: Can (new Random()).nextInt(5) always return the same number? - Stack Overflow
Generating random numbers in Java

Klopt!
Ik heb de links niet bekeken, maar een oplossing is:
1 randomgenerator voor heel je programma, die je via argumenten doorgeeft aan de functies die deze nodig hebben.
Of als je je randomgenerator enkel op die ene plaats nodig hebt, zorg dat je hem buiten de loop declareert, en in de loop steeds gebruik maakt van hetzelfde randomgenerator object.

RobinJ

Legacy Member
Een computer is nu eenmaal een logisch apparaat, dus is het vrijwel onmogelijk om een waar willekeurig getal te genereren.

RobinVdB

Legacy Member
RobinJ zei:
Een computer is nu eenmaal een logisch apparaat, dus is het vrijwel onmogelijk om een waar willekeurig getal te genereren.

Het is mogelijk om een random getal te maken hoor. Met pulses enzo.

Pudmeister

Legacy Member
In Visual basic heb ik dit probleem ook eens gehad. Ik maakte een array met random getallen. Nu was het vreemde, telkens wanneer ik de code runde kreeg ik de array met allemaal getallen, maar die arrays waren telkens hetzelfde. Dus ook op dezelfde plaats stond hetzelfde getal. Dan is er moeilijk sprake van random getallen. Er bestond een bepaalde methode die moest uitgevoerd worden, en die methode resette 'iets' in de computer waardoor bij elke run er wel verschillende getalen kwamen.

cptKangaroo

Legacy Member
'k Weet niet of het helpt, maar hier is mijn eigen random string generator in VB.NET (nota: verre van geoptimaliseerd)

zLength: lengte van de gereturnde random string
zPickFrom: characters die in de random string mogen voorkomen
Code:
    Public Function RandomString(ByVal zLength As Integer, _
                    Optional ByVal zPickFrom As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ") As String

        zLength = Math.Max(1, Math.Abs(zLength))
        If zPickFrom.Length < 1 Then Return ""

        Dim zRG As System.Security.Cryptography.RandomNumberGenerator = System.Security.Cryptography.RandomNumberGenerator.Create
        Dim zRBytes(zLength - 1) As Byte : zRG.GetBytes(zRBytes)

        Return String.Concat(zRBytes.SelectMany(Function(x) zPickFrom.Substring(x Mod (zPickFrom.Length), 1).ToString).ToArray)
    End Function
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan