it-swarm.com.de

Math.random () Erklärung

Dies ist eine ziemlich einfache Java-Frage (obwohl wahrscheinlich für alle Programmierungen anwendbar):

Math.random() gibt eine Zahl zwischen null und eins zurück.

Wenn ich eine ganze Zahl zwischen null und hundert zurückgeben möchte, würde ich Folgendes tun:

(int) Math.floor(Math.random() * 101)

Zwischen eins und hundert würde ich tun:

(int) Math.ceil(Math.random() * 100)

Aber was wäre, wenn ich eine Nummer zwischen drei und fünf haben wollte? Wird es wie folgt aussehen: 

(int) Math.random() * 5 + 3

Ich kenne nextInt() in Java.lang.util.Random. Aber ich möchte lernen, wie das mit Math.random() geht.

116
switz
int randomWithRange(int min, int max)
{
   int range = (max - min) + 1;     
   return (int)(Math.random() * range) + min;
}

Ausgabe von randomWithRange(2, 5) 10 mal:

5
2
3
3
2
4
4
4
5
4

Die Grenzen sind inklusive, dh [2,5] und min muss im obigen Beispiel kleiner als max sein.

EDIT: Wenn jemand versuchen wollte, dumm zu sein und min und max umzukehren, könnten Sie den Code ändern in

int randomWithRange(int min, int max)
{
   int range = Math.abs(max - min) + 1;     
   return (int)(Math.random() * range) + (min <= max ? min : max);
}

EDIT2: Für deine Frage zu doubles ist es nur:

double randomWithRange(double min, double max)
{
   double range = (max - min);     
   return (Math.random() * range) + min;
}

Und wenn Sie idiotensicher sein wollen, dann ist es nur:

double randomWithRange(double min, double max)
{
   double range = Math.abs(max - min);     
   return (Math.random() * range) + (min <= max ? min : max);
}
153
AusCBloke

Wenn Sie eine Zahl zwischen 0 und 100 generieren möchten, würde Ihr Code folgendermaßen aussehen:

(int)(Math.random() * 101);

So generieren Sie eine Zahl von 10 bis 20:

(int)(Math.random() * 11 + 10);

Im allgemeinen Fall

(int)(Math.random() * ((upperbound - lowerbound) + 1) + lowerbound);

(wobei lowerbound und upperbound inklusiv sind).

Der Einschluss oder Ausschluss von upperbound hängt von Ihrer Wahl ab. _. Sagen wir range = (upperbound - lowerbound) + 1, dann ist upperbound inklusiv, aber wenn range = (upperbound - lowerbound) dann upperbound exklusiv ist.

Beispiel: Wenn ich eine ganze Zahl zwischen 3 und 5 haben möchte, dann ist, wenn der Bereich (5-3)+1 ist, 5 einschließlich, aber wenn der Bereich nur (5-3) ist, dann ist 5 exklusiv. 

41
Teezy7

Die Java-Klasse Random , die sich im Paket Java.util befindet, wird Ihren Zwecken besser dienen. Es gibt einige nextInt() Methoden, die eine ganze Zahl zurückgeben. Derjenige, der ein int-Argument verwendet, generiert eine Zahl zwischen 0 und int, das letztere nicht inklusive.

18
G_H

Um eine Zahl zwischen 10 und 20 zu generieren, können Sie Java.util.Random verwenden. 

int myNumber = new Random().nextInt(11) + 10
1
Ilya Gazman

Hier ist eine Methode, die Grenzen empfängt und eine zufällige Ganzzahl zurückgibt. Es ist etwas fortgeschrittener (vollständig universell): Grenzen können sowohl positiv als auch negativ sein, und Minimum/Maximum-Grenzen können in beliebiger Reihenfolge kommen.

int myRand(int i_from, int i_to) {
  return (int)(Math.random() * (Math.abs(i_from - i_to) + 1)) + Math.min(i_from, i_to);
}

Im Allgemeinen wird der absolute Abstand zwischen den Rändern ermittelt, der relevante Zufallswert ermittelt und die Antwort basierend auf dem unteren Rand verschoben.

0
fault-tolerant