# Zufallszahl zwischen...



## Campino (12. Jan 2004)

Wie bekommt man Zufalszahlen zwischen zwei int Werten (z.b. 0 und 700). Gibt es da ne Funktion für oder muss ich das selbst Programmieren?? Die Zahlen sollen als Koordinaten von Canvas genutzt werden und wenn sie größer sind verschwinden die Unter anderen AWT-Elementen bzw. ganz aus dem Applet.


----------



## Kerberus (12. Jan 2004)

Ja gibt es:

```
import java.util.*;


.....
Random r = new Random();
int i = r.nextInt(50); //alle zahlen 0+1+2.....+49 beachte: 50 ist nicht inbegriffen
...
```


----------



## bummerland (12. Jan 2004)

```
import java.util.Random;
...

Random ran = new Random();
int zufallszahl = ran.nextInt(700)// ergibt zufallszahl zw. 0 und 700
```

[edit]da war ich wohl etwas zu langsam... [/edit] :roll:


----------



## www.rossbacher-f.de (31. Jan 2009)

/**
	 * Erzeugt eine zufällige Zahl in einem Bereich von Zahlen 
	 * @param von die von Grenze
	 * @param bis die bis Grenze
	 * @return eine zufällige Zahl zwischen von - bis
	 */
	public static int getZufallszahl(int von, int bis){
		Random ran = new Random();
		int zufallszahl = ran.nextInt((bis-von)+1);
		return von+zufallszahl;
	}


----------



## Gast (31. Jan 2009)

Inwiefern ist z.B Math.random()*20 schlechter zur Erstellung einer Zufallszahl ?


----------



## hdi (1. Feb 2009)

> Inwiefern ist z.B Math.random()*20 schlechter zur Erstellung einer Zufallszahl ?



Kleiner Test:



> --- Testing Math.random() and Random.nextInt() on a number between 0 and 1000
> 
> RUN1
> 1000 calls on Math.random()*1000 result in 96 different values.
> ...



... also gar nicht "schlechter", vllt ist das casten von double nach int halt etwas unnötige Arbeit..


----------



## Guest (1. Feb 2009)

hdi hat gesagt.:
			
		

> 1000 calls on Math.random()*1000 result in 96 different values.



Wie hast du das denn hinbekommen  :autsch:  :roll:


----------



## 0x7F800000 (1. Feb 2009)

Gast hat gesagt.:
			
		

> Inwiefern ist z.B Math.random()*20 schlechter zur Erstellung einer Zufallszahl ?


*1)* Math.random() legt sich beim ersten aufruf ein statisches Random-Objekt an, und bei allen darauffolgenden aufrufen fragt er jedes mal wie bescheuert _"if(randomNumberGenerator!=null){..."_ ab, obwohl es offensichtlich immer wahr ist. => Für die dämliche unnötige herumfragerei geht Zeit verloren.
*2)* Math.random() rechnet mit double. Einen gleichverteilten double herzustellen ist irgendwie voll die Kunst, wenn man denormalisierte Zahlen korrekt behandeln möchte usw. double ist auch noch 2x so breit wie ein int rein von bytes her
=> unnötiger aufwand für nichts
*3)* Math.random() rechnet nicht nur mit doubles, es gibt ja auch noch eines Zurück. Das anschließend wieder in Integer zu kasten ist bescheuert. => Umsonst gemachte Arbeit wird weggeworfen
*4)* Zwischendurch musst du noch mit 20 multiplizieren. Diese eine Multiplikation ist eine Multiplikation zuviel.
=> unnötige Arbeit
*5)* Das Debuggen wird geringfügig durch den Umstand erschwert, dass du bei Math.random() nicht ohne reflection den Seed auf irgendeinen festen Wert setzen kannst. D.h. es sind erstmal 10 Minuten Reflection-krämpfe nötig, um das Programm zu testzwecken deterministisch ablaufen zu lassen, um etwa selten auftretende Fehler aufzuspüren.

=> WHAAAAAA :autsch:

Benutzt Random!


----------



## hdi (1. Feb 2009)

> Wie hast du das denn hinbekommen



Ja ich kann's ja sagen, ich bin Jesus :gaen: . Aber normale Menschen kriegen sowas auch 
mit Schleifen hin.


----------



## Gast (1. Feb 2009)

hdi hat gesagt.:
			
		

> > Wie hast du das denn hinbekommen
> 
> 
> 
> ...



War mehr eine sarkastisch-rhetorische Frage, die darauf hinweisen sollte, dass dein Testcode vermutlich Müll ist, wenn du bei 1000 Versuchen Zahlen zwischen 0 und 1000 zu erzeugen nur 96 verschiedene Zahlen rausbekommst ...


----------



## hdi (1. Feb 2009)

Ja right hatte eine 0 in der for-schleife vergessen 
Ergebnisse liegen bei ~650 Werten. Ich fande es auch etwas strange
aber du kennst das ja wenn man sich denkt "hmm das is komisch", und dann schaut man fern. xD


----------

