Java - Zufallszahl vom Typ int zwischen 1-30 erzeugen - WIE?
Guten Tag.
Ich bin nun schon seit ca. einer halben Stunde am Googeln, aber ich bekomme es einfach nicht hin. ^^
Bitte könnt ihr mir helfen? Eine Ganzzahl zwischen 1-30 vom Typ int will ich haben. Vom Prinzip her will ich sowas hier haben:
int zufallszahl = Math.random(1-30);
String[] beispiel; beispiel = new String [31]. System.out.println(beispiel[zufallszahl]);
Hoffe das ist verständlich.
MfG Roni
6 Antworten
probier 'mal:
int zufallszahl = (int) ((Math.random()*30)+1);
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! :)
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.
Die Antwort ist natürlich korrektt. Wer die Laufzeit kritisiert, uebersieht, dass die Erzeugung der Zufallszahl selber bereits relativ aufwendig ist.
int zufallszahl = (int) ((Math.random()*30)+1);
Gibt Zufallszahlen zwischen 1 und 31 aus... richtig müsste int zufallszahl = (int) (Math.random()*30); sein
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.
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.
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.
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/
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.
Der unterste Code-Schnipsel in meinem Link, für high setzt du 30 ein, für low 0. Was funktioniert dann nicht?
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 :)
Diese Antwort ist in vielerlei Hinsicht deutlich besser, als die "Hilfreichste" weiter oben! DH! :)
die beste Methode ist folgende... ist schneller als Math.random und auch zufälliger
für mehr infos:
http://stackoverflow.com/questions/738629/math-random-versus-random-nextintint
man verwendet java.util.Random
int lowerBoundInclusive=1;
int upperBoundInclusive=30;
int random = new Random().nextInt(upperBoundInclusive)+lowerBoundInclusive;
System.out.println(random);
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