Dies ist eine ziemlich einfache Java-Frage (obwohl sie wahrscheinlich für alle Programmieraufgaben gilt):
Math.random()
gibt eine Zahl zwischen null und eins zurück.
Wenn ich eine Ganzzahl zwischen null und hundert zurückgeben möchte, würde ich Folgendes tun:
(int) Math.floor(Math.random() * 101)
Zwischen ein und hundert würde ich tun:
(int) Math.ceil(Math.random() * 100)
Aber was ist, wenn ich eine Zahl zwischen drei und fünf haben möchte? Wird es wie folgt sein:
(int) Math.random() * 5 + 3
Ich weiß über nextInt()
in java.lang.util.Random
. Aber ich möchte lernen, wie man das macht Math.random()
.
(int)Math.floor(Math.random()*3) + 3
Math.ceil
ist falsch und führt bei derMath.random()
Rückgabe zu einem falschen Ergebnis0
.Antworten:
randomWithRange(2, 5)
10-fache Ausgabe :Die Grenzen sind inklusive, dh [2,5], und
min
müssen kleiner sein alsmax
im obigen Beispiel.EDIT: Wenn jemand versuchen würde, dumm und umgekehrt zu sein
min
undmax
, könnten Sie den Code ändern in:EDIT2: Für Ihre Frage zu
double
s ist es nur:Und wieder, wenn Sie es idiotensicher machen wollen, ist es nur:
quelle
(int)
und möchten, dass es eindouble
zurückgibt?int
s durchdouble
s (und die Typumwandlung ist nicht erforderlich). Ich nahm an, du wolltestint
s, aber ich werde meinen Beitrag ergänzen.double
s entfernen die+ 1
auch daMath.random()
wird nicht abgeschnitten. Der Bereich ist jedoch [min, max), daMath.random
"ein doppelter Wert mit einem positiven Vorzeichen zurückgegeben wird, der größer oder gleich 0,0 und kleiner als 1,0 ist." Es würde eine sehr geringe Wahrscheinlichkeit geben, dass die Zahl genaumax
ist, selbst wenn es möglich wäre.Wenn Sie eine Zahl von 0 bis 100 generieren möchten, sieht Ihr Code folgendermaßen aus:
So generieren Sie eine Zahl von 10 bis 20:
Im allgemeinen Fall:
(wo
lowerbound
ist inklusive undupperbound
exklusiv).Der Einschluss oder Ausschluss von
upperbound
hängt von Ihrer Wahl ab. Nehmen wir an,range = (upperbound - lowerbound) + 1
dannupperbound
ist inklusive, aber wennrange = (upperbound - lowerbound)
dannupperbound
exklusiv.Beispiel: Wenn ich eine Ganzzahl zwischen 3-5 möchte, dann ist, wenn der Bereich (5-3) +1 ist, 5 inklusive, aber wenn der Bereich nur (5-3) ist, ist 5 exklusiv.
quelle
upperbound
exklusiv? Ich denke, es wird inklusive sein.Die
Random
imjava.util
Paket enthaltene Java-Klasse erfüllt Ihren Zweck besser. Es gibt einigenextInt()
Methoden, die eine Ganzzahl zurückgeben. Derjenige, der ein int-Argument verwendet, generiert eine Zahl zwischen 0 und diesem int, wobei letzteres nicht inklusive ist.quelle
Math.random()
. Vielen Dank.Um eine Zahl zwischen 10 und einschließlich 20 zu generieren, können Sie verwenden
java.util.Random
quelle
Hier ist eine Methode, die Grenzen empfängt und eine zufällige Ganzzahl zurückgibt. Es ist etwas weiter fortgeschritten (völlig universell): Grenzen können sowohl positiv als auch negativ sein , und minimale / maximale Grenzen können in beliebiger Reihenfolge auftreten.
Im Allgemeinen wird der absolute Abstand zwischen den Rändern ermittelt, der relevante Zufallswert abgerufen und die Antwort basierend auf dem unteren Rand verschoben.
quelle