Zufallszahl zwischen...

Status
Nicht offen für weitere Antworten.

Campino

Top Contributor
Wie bekommt man Zufalszahlen zwischen zwei int Werten (z.b. 0 und 700). Gibt es da ne Funktion für oder muss ich das selbst Programmieren?? Die Zahlen sollen als Koordinaten von Canvas genutzt werden und wenn sie größer sind verschwinden die Unter anderen AWT-Elementen bzw. ganz aus dem Applet.
 
Ja gibt es:
Code:
import java.util.*;


.....
Random r = new Random();
int i = r.nextInt(50); //alle zahlen 0+1+2.....+49 beachte: 50 ist nicht inbegriffen
...
 
Code:
import java.util.Random;
...

Random ran = new Random();
int zufallszahl = ran.nextInt(700)// ergibt zufallszahl zw. 0 und 700

[edit]da war ich wohl etwas zu langsam... [/edit] :roll:
 
/**
* Erzeugt eine zufällige Zahl in einem Bereich von Zahlen
* @param von die von Grenze
* @param bis die bis Grenze
* @return eine zufällige Zahl zwischen von - bis
*/
public static int getZufallszahl(int von, int bis){
Random ran = new Random();
int zufallszahl = ran.nextInt((bis-von)+1);
return von+zufallszahl;
}
 
Inwiefern ist z.B Math.random()*20 schlechter zur Erstellung einer Zufallszahl ?
 
Inwiefern ist z.B Math.random()*20 schlechter zur Erstellung einer Zufallszahl ?

Kleiner Test:

--- Testing Math.random() and Random.nextInt() on a number between 0 and 1000

RUN1
1000 calls on Math.random()*1000 result in 96 different values.
1000 calls on Random.nextInt(1000) result in 97 different values.

RUN2
1000 calls on Math.random()*1000 result in 95 different values.
1000 calls on Random.nextInt(1000) result in 96 different values.

RUN3
1000 calls on Math.random()*1000 result in 96 different values.
1000 calls on Random.nextInt(1000) result in 94 different values.

RUN4
1000 calls on Math.random()*1000 result in 93 different values.
1000 calls on Random.nextInt(1000) result in 89 different values.

RUN5
1000 calls on Math.random()*1000 result in 95 different values.
1000 calls on Random.nextInt(1000) result in 96 different values.

... also gar nicht "schlechter", vllt ist das casten von double nach int halt etwas unnötige Arbeit..
 
Gast hat gesagt.:
Inwiefern ist z.B Math.random()*20 schlechter zur Erstellung einer Zufallszahl ?
1) Math.random() legt sich beim ersten aufruf ein statisches Random-Objekt an, und bei allen darauffolgenden aufrufen fragt er jedes mal wie bescheuert "if(randomNumberGenerator!=null){..." ab, obwohl es offensichtlich immer wahr ist. => Für die dämliche unnötige herumfragerei geht Zeit verloren.
2) Math.random() rechnet mit double. Einen gleichverteilten double herzustellen ist irgendwie voll die Kunst, wenn man denormalisierte Zahlen korrekt behandeln möchte usw. double ist auch noch 2x so breit wie ein int rein von bytes her
=> unnötiger aufwand für nichts
3) Math.random() rechnet nicht nur mit doubles, es gibt ja auch noch eines Zurück. Das anschließend wieder in Integer zu kasten ist bescheuert. => Umsonst gemachte Arbeit wird weggeworfen
4) Zwischendurch musst du noch mit 20 multiplizieren. Diese eine Multiplikation ist eine Multiplikation zuviel.
=> unnötige Arbeit
5) Das Debuggen wird geringfügig durch den Umstand erschwert, dass du bei Math.random() nicht ohne reflection den Seed auf irgendeinen festen Wert setzen kannst. D.h. es sind erstmal 10 Minuten Reflection-krämpfe nötig, um das Programm zu testzwecken deterministisch ablaufen zu lassen, um etwa selten auftretende Fehler aufzuspüren.

=> WHAAAAAA :autsch:

Benutzt Random!
 
Ja right hatte eine 0 in der for-schleife vergessen 😉
Ergebnisse liegen bei ~650 Werten. Ich fande es auch etwas strange
aber du kennst das ja wenn man sich denkt "hmm das is komisch", und dann schaut man fern. xD
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben