webForumDet fria alternativet

Random

7 svar · 343 visningar · startad av learn

learnMedlem sedan jan. 20051 143 inlägg
#1

Jag försöker skapa en metod som gör att ett objekt rör på sig slumpmässigt. Borde inte detta funka?

/**
     * Slowly move the square randomized
     */

    public void moveRandom()
    {
        
int hi = 10, lo = 50;
int distance= Math.random() * (hi - lo) + lo;

			slowMoveHorizontal(distance);
			slowMoveVertical(distance);

    }

Felmeddelande: "Possible loss of precision" på raden "int result..."

Peter SMedlem sedan dec. 20025 484 inlägg
#2

1. Varför skapar du lokala variabler som ej används?
2. "Loss of precision"-meddelandet kan du åtgärda genom att typomvandla uttrycket Math.random() * (hi - lo) + lo till en int innan tilldelning.
3. Vad innehåller distance?

Red./ Såg nu att du ändrat litet grand i koden.

nitro2k01Medlem sedan aug. 20037 630 inlägg
#3

/r Såg Peter's svar
Så här ska typomvandlingen ske:

int distance= (int)(Math.random() * (hi - lo) + lo);
learnMedlem sedan jan. 20051 143 inlägg
#4

Som synes är jag ingen hejare på java, men d brukar gå bra att testa sig fram.. :)

distance vill jag ska innehålla det tal som slumas fram... tokigt?

nitro2k01Medlem sedan aug. 20037 630 inlägg
#5
  1. Vad vill du att programmet ska göra?
  2. Varför innehåller variabeln lo det högre värdet?
Peter SMedlem sedan dec. 20025 484 inlägg
#6

nitro skrev:

vad menar du med detta?

Den ursprungliga koden såg ut enligt nedan:

/**
     * Slowly move the square randomized
     */

    public void moveRandom()
    {
        
int hi = 10, lo = 50;
int [b]result[/b]= Math.random() * (hi - lo) + lo;

			slowMoveHorizontal(distance);
			slowMoveVertical(distance);

    }

:)

LimeMedlem sedan sep. 2001837 inlägg
#7

Förlåt... men vad är det för fel på:

int lo = 0;
int hi = 100;
Random r = new Random();
// Slumpa en int mellan 0 och 99.
int distance = r.nextInt(hi-lo)+lo;

Det är betydligt snabbare än "riktig random" och om man går såhär så skapar man en ny random vajre gång.

Jag skulle skapa random-objektet som ett klassattribut eftersom det då ger en statistisk normalfördelning av integers baserat på den millisekund som randomobjektet är skapat.

learnMedlem sedan jan. 20051 143 inlägg
#8

detta

int distance= (int)(Math.random() * (hi - lo) + lo);

fixade biffen, tack! givetvis ska lo va minst och hi störst...

132 ms totalt · 3 externa anrop · cache AV · v20260731051352-full.56cc9887
0 ms — hämta statistik (cache)
0 ms — hämta forumlista (cache)
129 ms — hämta tråd, inlägg och bilagor (db)