# math.random()



## chho0013 (9. Apr 2011)

hi!

int y= 10 + (int)(Math.random()* 11);         erzeugt Ganzahlen zwischen 10-20,
wo seh ich das?


----------



## Haave (9. Apr 2011)

Hier:
Math.random() (Java Platform SE 6)

Oder wie ist die Frage gemeint?


----------



## chho0013 (9. Apr 2011)

was bedeutet das 10+ und *11 gibt mir das den bereich aus? wenn dann müsste es doch bis 21 gehen?


----------



## Firephoenix (9. Apr 2011)

chho0013 hat gesagt.:


> hi!
> 
> int y= 10 + (int)(Math.random()* 11);         erzeugt Ganzahlen zwischen 10-20,
> wo seh ich das?



Hi,
schau bei solchen Sachen am besten die einzelnen Elemente an.
Dabei hilft die API: Java Platform SE 6

Hier erstmal der passende Auszug zu der Methode aus der Math-Klasse:


> random
> 
> public static double random()
> 
> Returns a double value with a positive sign, greater than or equal to 0.0 and less than 1.0.



Wir bekommen also erstmal einen Wert zwischen 0.0(inklusive) und 1.0(exklusive).
Als Beispiel für einen hohen z.b. 0.9989605167260749
und als Beispiel für einen Tiefen eben 0.0
Die beiden mal 11 und du hättest
10.9885657
bzw 0
Durch den cast nach (int) wird der Nachkommateil abgeschnitten und du erhälst Zahlen zwischen 0 und 10.
Und wenn du da noch 10 draufrechnest (was davor gemacht wird) hast du ganze Zahlen zwischen 10 und 20 
q. e. d.
Gruß

//E: wow als ich angefangen hab zu schreiben stand da noch kein einziger Beitrag


----------



## Haave (9. Apr 2011)

Java-API hat gesagt.:
			
		

> Returns a double value with a positive sign, greater than or equal to 0.0 and less than 1.0.


Das bedeutet, wenn du einfach nur mit Math.random() allein eine Zahl erzeugen lässt, wird sie zwischen 0.0 (inclusive) und 1.0 (exclusive) liegen. Sie kann also also alles dazwischen sein, das wichtige ist aber, dass die obere Grenze nicht erreicht wird (die Zahl kann nicht 1.0 werden).
Wenn du nun Math.random() * 10 rechnest, erhältst du Zahlen im Bereich 0.0 und 10.0, wobei wiederum 10 nicht erreicht wird. Darum addiert oder subtrahiert man noch eine Zahl, um den Bereich zu verschieben.

Auf dein Beispiel bezogen funktioniert es also so:

1.) Math.random() * 11 => Bereich zwischen 0 und 11 (erreicht werden alle Zahlen zwischen 0.0 inclusive und 11.0 exclusive, also auch 10.0, 10.6 etc.).
2.) + 10 => verschiebt den Bereich nach oben, so dass er zwischen 10 inclusiv und 21 exclusiv liegt. Die von dir geschriebene Angabe "erzeugt Ganzahlen zwischen 10-20" meint dabei die inclusiven Werte, d.h., 20 liegt innerhalb des Bereichs.


----------



## chho0013 (9. Apr 2011)

Firephoenix hat gesagt.:


> Hi,
> schau bei solchen Sachen am besten die einzelnen Elemente an.
> Dabei hilft die API: Java Platform SE 6
> 
> ...



vielen dank, super erklärt!!!!


----------



## Haave (9. Apr 2011)

War meine Erklärung denn auch gut verständlich oder gibt's was zu verbessern? :joke:


----------



## AlfAtor (9. Apr 2011)

Haave hat gesagt.:


> War meine Erklärung denn auch gut verständlich oder gibt's was zu verbessern? :joke:



War auch gut


----------



## Landei (9. Apr 2011)

Es sei noch angemerkt, dass sich bei ganzzahligen Aufgabenstellungen [c]java.util.Random.nextInt[/c] anbietet.


----------



## Marco13 (9. Apr 2011)

Da speziell, aber nicht nur da: Auch bei Doubles sollte man IMHO nicht Math.random, sondern Random#nextDouble verwenden: Nur damit kann man die Folge der Zahlen reproduzierbar machen (für Debugging).


----------

