Random() : Bereich festelgen

Status
Nicht offen für weitere Antworten.

hdi

Top Contributor
Hi, ich möchte mir Zufallszahlen im Bereich von 0 bis 3 erzeugen lassen.

Ich werd aber aus der manpage von der Klasse Rando nicht schlau.

Da gibt es nur einen Konstruktor mit irgendeinem long-wert, genannt "seed". Weiss gar nicht was das bedeutet.

Finde auch keine Methode für sowas irgendwie.

Wie kann ich denn den Zahlenbereich des Generators einstellen?

Danke.
 

Pappenheimer++

Bekanntes Mitglied
Code:
import java.util.Random;
class Test 
{
//...........
Random rnd=new Random();
int z=rnd.nextInt(4); //liefert zahlen zwischen 0 (inklusive) und 4 (exklusive)
}
 
S

SlaterB

Gast
seed ist eine Einstellung von Random, wenn du mit seed 1452 anfängst,
dann kommen vielleicht als erstes die Zufallszahlen 45, 34, 9 und 1003

nun kannst du dir sicher sein, dass diese Zahlen immer kommen werden, wenn du einen neuen Random mit seed 1452 erstellst


-----------

> Wie kann ich denn den Zahlenbereich des Generators einstellen?

nextInt(int n)


die seed-Zahlen weiter oben sind natürlich abstrakt zu sehen,
oder vielleicht als double-Werte zwischen 0 und 1,
wenn du nextInt(4) aufrufst, bekommst du vielleicht nur 3,3, 2,3,0
aber auf jeden Fall bei jeder Ausführung die gleichen, wenn du immer alles gleich machst
 

Backwardsman

Bekanntes Mitglied
"seed" = "saat" ist der start-wert für einen (pseudo)zufallszahlengenerator. wie schon erwähnt ist eine reihe von zufallszahlen reproduzierbar, sofern man den gleichen seed-wert nimmt. typischerweise will man ja, dass die zahlen möglichst "zufällig" sind, deshalb verwenden viele als startwert einfach die aktuelle systemzeit, so dass von einem anderen der start-wert nicht geraten werden kann, schließlich hätte der andere dann ja alle zufallszahlen und könnte auch zukünftige zahlen bestimmen. bei extrem sicherheitskritischen anwendungen verlässt man sich dann übrigens nicht mal mehr auf die systemzeit...

mit der nextRandom() funktion bekommst du zahlen zwischen 0.0 und 1.0... ich würde diese zahlen jetzt einfach mit 10 multiplizieren, dann erhälst du zahlen zwischen 0.0 und und 10.0 und alle wegschmeißen die kleiner 0 oder größer 3 sind...

Code:
	Random rand = new Random(System.currentTimeMillis());
	double x = -1;
	while (x < 0 || x > 3) {
		x = 10 * rand.nextDouble();
	}
	System.out.println(x);
 
S

SlaterB

Gast
<0 geht eh nicht

was hat es für einen Sinn, mit 10 zu multiplizieren und 70% wegzuschmeißen?
wenn überhaupt, dann mal 4 und 25% wegschmeißen, oder mal 3.000000001 und sehr wenig wegschmeißen

aber das nur, damit der Wert 3 kommen kann?
wollen wir mal die Wahrscheinlichkeit ausrechnen, dasss jemals genau 3.000000000 kommt? ;)
falls das überhaupt möglich ist, denn dann müsste die Original-Zufallszahl
0.300000000000 oder 0.75000000000 sein, was auch nicht gerade leicht ist

wenn die 3.00000 nicht dazugehören muss, dann ganz simpel * 3 ohne while-Schleife,

wenn es eh um ints geht, dann nextInt(4)
 

tincup

Bekanntes Mitglied
Also das mit dem mit 10 multiplizieren erschliesst sich mir auch nicht ganz. Und mit der 3 auch nicht, denn wenn ich die 3 nur mit einer verschwindend kleinen Wahrscheinlichkeit, oder generell mit einer anderen Wahrscheinlichkeit als 0, 1 oder 2 erwische, ist das ganze Ding ja völlig unbrauchbar.

Wüsste auch nicht, wo das Problem an (int)(Math.random() * 4) liegen soll, 4 kommt da nicht raus weil laut API explizit Math.random() einen Wert >= 0 aber < 1 rausgibt. Ob sich Random#nextDouble auch so verhält ist nicht ganz klar ersichtlich aus der Doku.
 

Ariol

Top Contributor
Ob das hier das Problem löst weiss ich leider nicht, aber versuchen kannst du's ja mal:

Code:
double ausgleicher = Math.random()+Math.random();
		while(ausgleicher > 1)
		{
			ausgleicher -= Math.random();
		}
		
		double zufallsZahl = ausgleicher*Math.random()*3;
 

Backwardsman

Bekanntes Mitglied
also ich habe mal 10 genomnen, weil *3 nicht ausreicht! in der doku steht "from the range 0.0d (inclusive) to 1.0d (exclusive)", also ohne 1.0 und dann käme der wert 3.0 niemals vor. mit 4 multiplizieren ist doch auch quatsch, weil dann werte bis 3.999...96 rauskommen, was laut des ersten beitrags ja nicht der fall sein soll, oder? ... wollt einfach nur ne nummer sicher gehen... außerdem handelt es sich um eine anfänger-frage und hab angenommen, dass jetzt effizienz nicht so die super-wichtige rolle spielt (das 70% weggeschmissen werden stimmt ja immerhin)... letztendlich wäre es wie bereits schon erwähnt totaler quatsch die systemzeit als seed zu nehmen, was die zufallszahlen eh alle im voraus berechenbar macht!
 
S

SlaterB

Gast
> mit 4 multiplizieren ist doch auch quatsch, weil dann werte bis 3.999...96 rauskommen

wenn man deine Abfrage mit größer 3 drinlässt, dann ist es das gleiche wie bei 10,
nur mit 25% Verlust statt 70%,
klar ist das nur ne Spielerei, aber es gibt doch nicht den Hauch eines Grundes, 5, 10, 59996 oder irgendeine andere Zahl größer 4 zu nehmen
(3.0000001 reicht auch, aber da wirds langsam unschön, wobei das ganze System natürlich wenig Sinn macht)
 

tincup

Bekanntes Mitglied
Irgendwie ist das hier alles komisch :wink: so schwer ist das ganze doch nun nicht.

Wenn ich mit 4 malnehme ist das nicht quatsch sondern exakt der Weg zum Ziel. Ich erhalte approximativ gleichverteilt die Zahlen 0, 1, 2 und 3, das war das vom Original-Poster geforderte. Eben genau dass es nur bis 3,999xxx geht ist ja der Grund, warum das funktioniert!

Die zweite Frage war nach dem Seed, die wurde aber beantwortet, ist halt für die Initialisierung des Pseudo!-Random-Number Generators.
 
S

SlaterB

Gast
tincup, du verfolgst da was anderes, du willst danach ja noch auf int abrunden, da kann man dann auch gleich nextInt(4) nehmen,

Backwardsman hatt ja schon die Idee, den double ganz zu behalten, aber nur genau bis maximal 3.00000 (nicht 2.99999),
das ist ein anderes Thema
 

tincup

Bekanntes Mitglied
Hier nochmal der Beweis, dass es funktioniert (wenn auch eher empirisch als mathematisch):

1 Milliarde Zufallszahlen, dann die relative Häufigkeit ausgegeben, wie oft welche kam. Paar Millionen hättens wohl auch getan.

Code:
int c[] = new int[4];
final int total = 1000000000;
for (int i=0; i<total; i++) {
	c[(int)(Math.random()*4)]++;
}
System.out.println((float)c[0]/(float)total);
System.out.println((float)c[1]/(float)total);
System.out.println((float)c[2]/(float)total);
System.out.println((float)c[3]/(float)total);

Ergibt

Code:
0.2500188
0.24999553
0.24999027
0.2499954

Keine Index Out Of Bounds exception, also auch keine falschen Zahlen. Was will man mehr.

Grüsse,
Tin
 

tincup

Bekanntes Mitglied
Das mit den nextInt ist schon richtig aber hier wurden ja die dubiosesten Sachen behauptet die nicht funktionieren können, da wollte ich mal zeigen, dass er klassische Weg halt richtig ist.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Bereich festelgen bei Random Java Basics - Anfänger-Themen 9
M Random bereich und for schleife Java Basics - Anfänger-Themen 20
W Bestimmte Zahlen bei Math.random ausschließen? Java Basics - Anfänger-Themen 31
W n verschiedene Arrays zufällig ausgeben - mit der Random-Klasse? Java Basics - Anfänger-Themen 8
S Math.random funktioniert nicht Java Basics - Anfänger-Themen 5
S Random(x,y,z) Java Basics - Anfänger-Themen 4
alialhajhossein math.random Java Basics - Anfänger-Themen 3
JD_1998 Random Array sortieren mit Hilfe einer Methode Java Basics - Anfänger-Themen 4
L Zufälliges Objekt aus der ArraylList ohne java.util.Random Java Basics - Anfänger-Themen 56
W Random Zahl unter Berücksichtung eines Durchschnitts Java Basics - Anfänger-Themen 7
D Wahrscheinlichkeiten mit Math.random() Methode Java Basics - Anfänger-Themen 1
T Random soll Zufallszahl beibehalten. Java Basics - Anfänger-Themen 11
A Random Double mit Math.round() runden? Java Basics - Anfänger-Themen 1
B Math.random mit Boolean array? Java Basics - Anfänger-Themen 17
I math.random Grenzwerte Java Basics - Anfänger-Themen 2
C Arraywerte random vertauschen Java Basics - Anfänger-Themen 2
E Methoden Math.Random() kürzen ? Java Basics - Anfänger-Themen 2
SchmidiMC Methoden Random in Methode neu generieren lassen Java Basics - Anfänger-Themen 1
J Klassen Math && Random: wie zufällig sind Zufallszahlen? Java Basics - Anfänger-Themen 19
J Operatoren Random wird nur einmal erstellt und dann immer verwendet Java Basics - Anfänger-Themen 2
D Erste Schritte Random erzeugen Java Basics - Anfänger-Themen 28
D Erste Schritte Random Java Basics - Anfänger-Themen 79
Z Problem mit "Random" in Java Java Basics - Anfänger-Themen 12
Z Array-Index einmalig je mit Random füllen Java Basics - Anfänger-Themen 7
J Wie lege ich eine durch Random ausgesuchte Zahl in ein Array? Java Basics - Anfänger-Themen 3
F Erste Schritte Random Zahl auswählen Java Basics - Anfänger-Themen 7
J Methoden Math.random unklar Java Basics - Anfänger-Themen 4
N java.util.Random - Zwei Zahlen mit festgesetzter Wahrscheinlichkeit? Java Basics - Anfänger-Themen 15
Thorwine Erste Schritte Wuerfelspiel mit Math.random() Java Basics - Anfänger-Themen 10
S Math.random() Zufall ? Java Basics - Anfänger-Themen 2
S Random Plattformen erstellen Java Basics - Anfänger-Themen 7
C Erste Schritte Random Wert auslesen und ausgeben Java Basics - Anfänger-Themen 2
H Ist Math.Random() eine Methode oder ein Methodenaufruf (Klausurfrage) Java Basics - Anfänger-Themen 4
I Random Ergebnis ausgeben und Gewinner ausgeben. Java Basics - Anfänger-Themen 3
I Spieler Name eintragen und Random Gewinner Java Basics - Anfänger-Themen 4
A Random String in TextView (Android)? Java Basics - Anfänger-Themen 2
V Random Java Basics - Anfänger-Themen 2
X Problem mit Math.random() Java Basics - Anfänger-Themen 2
S Random IDs immer 10-stellig? Wie? Java Basics - Anfänger-Themen 5
T Random vs. Math.random() Java Basics - Anfänger-Themen 2
R Schaffe es nicht Random-Programmierung zu vollenden. Wo liegt der Fehler in diesem Code? Java Basics - Anfänger-Themen 13
Y Random-Objekt und Swing Java Basics - Anfänger-Themen 4
B Verstehe ZufallInt = (int) (Math.random() * 5 + 1); nicht Java Basics - Anfänger-Themen 9
K Doppelte namen bei random Java Basics - Anfänger-Themen 3
K Einfacher random namen weitergeben Java Basics - Anfänger-Themen 4
B Hilfe bei Greenfoot ( random blickrichtung + vor(); Java Basics - Anfänger-Themen 10
B Variablen Mehrere Zahlen mit unterschiedlicher Wahrscheinlichkeit mit Random auswählen Java Basics - Anfänger-Themen 17
Jagson Dotcom Spiel - Dots Random setzen Java Basics - Anfänger-Themen 8
R java.util.Random Java Basics - Anfänger-Themen 8
T Zufallserzeugung mit math.random und speichern in array Java Basics - Anfänger-Themen 29
J Woher kommt das Objekt "Math" bei Math.random(); ? Java Basics - Anfänger-Themen 3
P Typecasting für Ganzzahlige Zufallszahl (Math.random) Java Basics - Anfänger-Themen 2
I Zwei Mal das selbe Objekt per Random :( Java Basics - Anfänger-Themen 7
E Random Java Basics - Anfänger-Themen 7
Q Random Funktion JButtons Java Basics - Anfänger-Themen 6
E Variable neue Random Zahl zuweisen, wenn Button geklickt Java Basics - Anfänger-Themen 5
J Bedeutung von math.random() math.round() Java Basics - Anfänger-Themen 7
K ArrayList random füllen Java Basics - Anfänger-Themen 2
K random problem Java Basics - Anfänger-Themen 3
F Problem Math.random in for-Schleife Java Basics - Anfänger-Themen 8
R (Math.random()*49) zahl darf aber nur einmal gezogen werden Java Basics - Anfänger-Themen 11
B Random() gleiche Zahlen ausschließen Java Basics - Anfänger-Themen 30
T Buttons (auf denen bilder sind) random vertauschen Java Basics - Anfänger-Themen 11
C math.random() Java Basics - Anfänger-Themen 9
R math.random wertebereich 16-21 Java Basics - Anfänger-Themen 3
B Math.random und Strings Java Basics - Anfänger-Themen 13
R Java Random Java Basics - Anfänger-Themen 13
G Zahl erstellen / Random Java Basics - Anfänger-Themen 12
J Random Java Basics - Anfänger-Themen 11
radiac Datentypen RANDOM-punkt setzen INNERHALB eines BEREICHes Java Basics - Anfänger-Themen 2
M Zufallszahlen mit Random Java Basics - Anfänger-Themen 4
K Random Zahlen in ein Feld Java Basics - Anfänger-Themen 4
N java.util.Random Java Basics - Anfänger-Themen 6
Luk10 math.random() Java Basics - Anfänger-Themen 2
walker23m Datentypen Zufällig umsortieren einer Hashmap(random?) Java Basics - Anfänger-Themen 3
M Junit TestCase für Random() Zahlen Java Basics - Anfänger-Themen 6
S Random zahlen mit unter und obergrenze Java Basics - Anfänger-Themen 3
D Problem mit Set, Stack und Random Java Basics - Anfänger-Themen 2
S Skatblatt darstellen durch Random? Java Basics - Anfänger-Themen 48
H Random-Zahlen Java Basics - Anfänger-Themen 7
L Random Sortierung Java Basics - Anfänger-Themen 9
T random-methode Java Basics - Anfänger-Themen 18
M Random in Swing Java Basics - Anfänger-Themen 24
J Math.random() - kurze frage. Java Basics - Anfänger-Themen 20
J Random Wertebereich Java Basics - Anfänger-Themen 2
B Frage zu Random Java Basics - Anfänger-Themen 21
chik klasse random() Java Basics - Anfänger-Themen 6
B Random Zahlen und Formatierung Java Basics - Anfänger-Themen 6
G Random Zahlen Java Basics - Anfänger-Themen 25
S Diashoow Random Java Basics - Anfänger-Themen 4
G Switch-Case harmoniert nicht mit Random-Zahl Java Basics - Anfänger-Themen 3
Spin 4 stellige random zahl erzeugen Java Basics - Anfänger-Themen 4
G random mit tendenz? Java Basics - Anfänger-Themen 8
hedges Würfelwurf mit java.util.Random ohne 0 Java Basics - Anfänger-Themen 6
P Vererbung Random Java Basics - Anfänger-Themen 23
J Math.random Java Basics - Anfänger-Themen 12
D Dateizugriff - An bestimmter Position Lesen (Random Access) Java Basics - Anfänger-Themen 2
L while + random Java Basics - Anfänger-Themen 6
F Wurfelspiel erstellen, bei dem mit Random-Werten gearbeitet Java Basics - Anfänger-Themen 3
E Problem mit Random Funktion Java Basics - Anfänger-Themen 2

Ähnliche Java Themen


Oben