Avatar billede Slettet bruger
13. maj 2002 - 15:05 Der er 7 kommentarer og
2 løsninger

math.random.

Som nyudklækket Æg indenfor computerprogrammering støder jeg hele tiden på problemer. Da det er lidt kedeligt at lave forudsigelige programmer, hvor værdierne er tastet ind på forhånd, ville det være mere spændende, hvis jeg med math.random() gav programmer mulighed for at vælge andre forskellige løsninger hver gang programmet kører. Dette gøres med Math.random(), problemmet er bare at værdien(variablen) kun kan ligge mellem 0,0 til 0,99.

Jeg er iøjeblikket i gang med at lave et lille program, som kan udregne prisen på et brev, afhængig af brevets vægt. Her er værdierne jo andre end mellem 0,0 til 0,99. Her taler man jo om 20 gram, 50 gram og hundrede gram... Spørgsmålet er så: Kan jeg ændre i math.random eller bruge en anden metode, så den for eksempel kunne skilne mellem 20,50 og 100 gram.
Avatar billede carstenknudsen Nybegynder
13. maj 2002 - 15:10 #1
Du skal istedet for Math.random take
fat i java.util.Random klassen der
har flere muligheder for at få
tilfældige tal ud, f.eks. gaussisk
fordelte tilfældige tal, heltal,
flydende tal etc. Du skal forvente
at lave lidt skalering af det der
kommer ud af din tilfældighedstals-
generator. For at få tal fra x1 til x2
skal du transformere til x1+(x2-x1)*random.
Avatar billede Slettet bruger
13. maj 2002 - 15:17 #2
det vil sige at jeg skal importe java.util.Random i starten af programmet?

Hvordan vil de se ud i kildekode:

Normalt ser det sådan ud:

proto = math.random()

Hvordan vil de så skrives ved din metode?
Avatar billede aslan Nybegynder
13. maj 2002 - 15:21 #3
int vælg = (int)(Math.random()*10);
if(vælg <= 3) vælg 20g;
else if(vælg <= 6) vælg 50g;
else vælg 100g;
Avatar billede carstenknudsen Nybegynder
13. maj 2002 - 15:21 #4
import java.util.Random;

Random rand = new Random();
double x1 = -2.3;
double x2 = 4.5;
double x = x1+(x2-x1)*rand.nextDouble();
hvor du naturligvis indsætter dine grænser
i stedet for x1 og x2.
Avatar billede aslan Nybegynder
13. maj 2002 - 15:22 #5
Hvis jeg har forstået dig rigtig!
Avatar billede carstenknudsen Nybegynder
13. maj 2002 - 15:23 #6
aslan: sandsynlighederne for dine
valg er ikke i overensstemmelse
med en trunkering f.eks, ellers
er det en ok løsning så længe
du ikke har for mange udfald.
Avatar billede jakoba Nybegynder
13. maj 2002 - 15:27 #7
int[] udfald = new int[ 3 ];
udfald[0] = 20;
udfald[1] = 50;
udfald[2] = 100;

  double rndom = Math.random()*3;  // fra 0 til (men ikke med 3.
  int dice3 = Math.floor( rndom ); // 0, 1 eller 2 (ligeligt fordelt)
  int vegt = udfald[ dice3 ]; // 20, 50 eller 100

det kan så stables sammen til:
  int vegt = udfald[ Math.floor( Math.random()*3 ) ];

Hvis du synes der skal være flere breve af 20 gram kan du oprette flere 20 celler i arrayet og gange Math.random() med et større tal.

mvh JakobA
Avatar billede Slettet bruger
13. maj 2002 - 15:33 #8
Til carstenknudsen:

double x1 = -2.3;

vil det betyde at jeg kan udskifte således?

double x1 = -10;

????
Avatar billede carstenknudsen Nybegynder
13. maj 2002 - 15:38 #9
Ja, du skriver bare din nedre grænse
i stedet for højresiden i x1 og ligeledes
for størsteværdien i højresiden for x2.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester