# Int Array mit Zufallszahlen füllen



## bjcoon (18. Mai 2008)

Mit welchem Befehl kann ich ein integer Array mit einer Obergrenze mit Zufallszahlen füllen?


----------



## Butterfly (18. Mai 2008)

Ganz einfach über Math.random.


```
int[] a = new int[500]; //Größe natürlich beliebig
int oberGrenze = ?; //kannst du wählen wie du willst

for(int i = 0; i<a.length; i++) {
     a[i] = (int)(Math.random()*oberGrenze); //casten nicht vergessen!
}
```

Durch das multiplizieren mit "oberGrenze" erhälst du dann Zufallszahlen im Intervall [0,oberGrenze]


----------



## bjcoon (18. Mai 2008)

Butterfly hat gesagt.:
			
		

> ```
> a[i] = (int)(Math.random()*oberGrenze); //casten nicht vergessen!
> ```



Kannst du mir die Zeile nochmal erklären. Mir erschließt sich das multiplizieren mit meiner gesetzten Obergrenze nicht! Was bedeuten "casten" und warum soll ich das nicht vergessen?

Danke


----------



## Butterfly (18. Mai 2008)

Ah, okay, dass ist ganz einfach. Zuerst zur Obergrenze:
Math.random() liefert dir eine Pseudozufallszahl im Intervall [0,1] (d.h. 0 & 1 eingeschlossen). Willst du also z.B. dann Zufallszahlen von 0 bis 5 haben, musst du diese erzeugte Zufallszahl mit 5 multiplizieren. 0*5 ist 0, 1 * 5 ist 5. Alle Zahlen zwischendrin geben dir dann durch die Multiplikation z.B. Zahlen wie 3.235, 2.198, 4.12, 0.445 etc.
Die musst du dann noch abrunden und du hast eine Ganzzahl in deinem gewünschten Intervall.

Zum Casten:
Math.random() liefert dir einen double-Werte. Aber double ist natürlich nicht gleich int und du kannst daher double-Werte nicht so einfach in eine int-Variable reinpacken. Daher konvertierst du die double-Zahl zu einem int. Das wird casten genannt. Generell geht das casten einfach durch angeben des Datentyps in Klammern vor dem Ausdruck, der gecastet werden soll (wie in meinem Beispielcode).

Das Casten übernimmt dir hier auch gleichzeitig das abrunden. Da int ja keine Kommazahlen darstellen kann, werden die durch das casten nämlich einfach abgeschnitten.


----------



## Illuvatar (18. Mai 2008)

Math.random() gibt dir eine double-Zufallszahl zwischen 0.0 und 1.0.
Wenn du das Ergebnis mit 50 multiplizierst, erhältst du eine double-Zufallszahl zwischen 0.0 und 50.0.
Weil du eine Ganzzahl wolltest, wird das in int gecastet (deshalb das int in Klammern). Dabei werden die Nachkommastellen abgeschnitten.
Man sollte noch dazusagen: In diesem Fall bedeutet "Obergrenze 50" dass die resultierenden Zahlen kleiner als 50, nicht kleiner/gleich 50 sind (Math.random gibt immer Zahlen < 1.0 aus).

Edit: Mist, zweiter  Aber @Butterfly:


			
				Butterfly hat gesagt.:
			
		

> Pseudozufallszahl im Intervall [0,1] (d.h. 0 & 1 eingeschlossen)


stimmt nicht, siehe hier.


----------



## bjcoon (18. Mai 2008)

Warum wird (int) geschrieben vor der Multiplikation?


----------



## Illuvatar (18. Mai 2008)

bjcoon hat gesagt.:
			
		

> Warum wird (int) geschrieben vor der Multiplikation?



(int)(irgendwas) bedeutet, dass irgendwas in ein int gecastet wird. In deinem Fall wird also das Ergebnis der Multiplikation in eine Ganzzahl gecastet.


----------



## bjcoon (18. Mai 2008)

so hatte ich mir das gedacht!!

Danke.

Auch sehr gut zu wissen, dass Math.random nur Zahlen zwischen 0 und 1 sucht.

Also vielen Dank!


----------



## Butterfly (18. Mai 2008)

Illuvatar hat gesagt.:
			
		

> Edit: Mist, zweiter  Aber @Butterfly:
> 
> 
> 
> ...



Ah, danke für die Aufklärung. Gut, dass du mich drauf hinweist, das hatte ich jetzt schon länger so (falsch) im Kopf. Gleich mal merken.


----------

