Java - Zufallszahl vom Typ int zwischen 1-30 erzeugen - WIE?

6 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

probier 'mal:

int zufallszahl = (int) ((Math.random()*30)+1);


TeeTier  07.02.2015, 22:04

Ich kann nicht ganz nachvollziehen, dass diese Antwort hier als "Hilfreichste" ausgewählt wurde, denn eigentlich ist die Antwort vom User "Speedyschmid" korrekt, oder zumindest DEUTLICH performanter!

Diese Antwort hier funktioniert zwar, ist allerdings MINDESTENS um den Faktor 200 (wenn nicht 500) langsamer, da unnötig Gleitpunktoperationen mit doppelter Genauigkeit durchgeführt werden müssen! Hinzu kommt, dass die Zufallszahlen - bedingt durch die implementierung der Random-Klasse und durch die Spezifikation von IEEE754 Gleitpunktzahlen, nicht so gleichmäßig verteilt sein werden, wie in der Antwort von "Speedyschmid" weiter unten.

Also für alle, die das hier lesen: Diese Antwort hier funktioniert zwar gerade mal so, ist aber nicht wirlich schick und schon gar nicht sauber, und zudem noch unperformant! Also bitte die Antwort von "Speedyschmid" weiter unten beachten! :)

0
GlasNachbar12 
Beitragsersteller
 22.02.2013, 09:40

Hey, super!! Vielen vielen Dank! Es funktioniert perfekt. Könntest du mir eventuell noch kurz erklären wieso genau?

Den Stern bekommst du aber so oder so. ;)

MfG

0
Gremlin491  22.02.2013, 09:44
@GlasNachbar12

Math.random() liefert eine Zufallszahl >= 0 und <1 (0.00000 - 0.999999)

Die multiplizierst Du mit dem maximalen Wert und castest das Ergebnis auf einen int.

3
nikolaiki  22.06.2015, 00:21
@Gremlin491

Die Antwort ist natürlich korrektt. Wer die Laufzeit kritisiert, uebersieht, dass die Erzeugung der Zufallszahl selber bereits relativ aufwendig ist.

0
ceevee  22.02.2013, 09:39

int zufallszahl = (int) ((Math.random()*30)+1);

Gibt Zufallszahlen zwischen 1 und 31 aus... richtig müsste int zufallszahl = (int) (Math.random()*30); sein

0
teambuktu  23.05.2014, 22:10
@ceevee

Nein, das wäre nicht richtig...mit (int)(Math.random()*30) erhielte man nur Zahlen zwischen 0 und 29.

0

In Java weißt man einer Variablen einen Wert mit := zu und nicht mit =

Zu Beginn musst du die Zahl initialisieren, also zuweisen, dass sie eine int-zahl sein soll und auf null setzen (falls das Programm mehrfach durchlaufen soll)

Irgendwie musst du das Programm starten. Vielleicht mit einer Abfrage: "Wollen Sie eine Zufallszahl bis 30 haben? Drücken Sie "j" für ja oder "n" für nein"

Dann solltest du ne Schleifen haben, die bei "j" das Programm laufen lässt oder bei "else" das Programm abbricht.

Oder du willst die Zufallszahl nur als Teil eines anderen Programmes. Also musst du den Wert der Variablen im Hauptprogramm zuweisen.


GlasNachbar12 
Beitragsersteller
 22.02.2013, 09:35

Es sollen zufallmäßig Sprüche ausgegeben werden. Ich hab das doch auch schon alles soweit gemacht, dass es weiter geht, wenn man einfach nur enter drückt und mit ENDE ENTER beendet werden kann. Aber das tut doch nichts zur Sache, ich will einfach nur eine ganze Zufallszahl zwischen 1-30..

Und in Java initialisiert man Variablen sehrwohl a = x; und man kann auch sofort a = Math.random() machen, der Variable muss vorher noch kein Wert zugewiesen worden sein.

0
ceevee  22.02.2013, 09:29

In Java weißt man einer Variablen einen Wert mit := zu und nicht mit =

Das ist Unsinn, := ist die Zuweisung u.a. in Pascal und Delphi,in Java ist es =

Irgendwie musst du das Programm starten. Vielleicht mit einer Abfrage: "Wollen Sie eine Zufallszahl bis 30 haben? Drücken Sie "j" für ja oder "n" für nein"

Das hat nix mit der Frage zu tun

Dann solltest du ne Schleifen haben, die bei "j" das Programm laufen lässt oder bei "else" das Programm abbricht.

Bedingungen sind keine Schleifen

Oder du willst die Zufallszahl nur als Teil eines anderen Programmes. Also musst du den Wert der Variablen im Hauptprogramm zuweisen.

Der Wert soll zufällig sein und er will gerade wissen, wie er diese Zufallszahl bekommt.

0

Also ich nehm immer den Random her (ich programmiere mit Eclipse). man muss ihn erst importieren:

import java.util.Random;

und dann

Random rand = new Random();
int zahl = rand.nextInt(30)+1;

hoffe das hilft dir :)


TeeTier  07.02.2015, 22:07

Diese Antwort ist in vielerlei Hinsicht deutlich besser, als die "Hilfreichste" weiter oben! DH! :)

0
PCHelpline  23.05.2014, 22:15

bist ja nen Fuchs ;) Immerhin noch erliche Leute hier mit Ahnung^^

0

Jaja, eine halbe Stunde am Googeln... entweder du lügst oder du kannst nicht mit Google umgehen. http://blog.root-of-all-evil.com/2010/03/math-random-zufallszahlen-in-java/


GlasNachbar12 
Beitragsersteller
 22.02.2013, 09:33

Da war ich auch schon überall, aber entweder werd ich nicht schlau draß, oder es funktioniert irgendwie nicht.

Lügen tu ich nicht und mit Google kann ich eigentlich auch umgehen.

0
ceevee  22.02.2013, 09:37
@GlasNachbar12

Der unterste Code-Schnipsel in meinem Link, für high setzt du 30 ein, für low 0. Was funktioniert dann nicht?

1