# Random - Problem



## Gast (8. Feb 2007)

Hallo,
ich hab folgenden Code geschrieben um in JAVA-ME eine Zufallszahl zwischen 1 und "max" zu erzeugen.
Komischerweise kommen 2, 3, oder 9 sehr sehr häufig vor, andere dafür fast nie.
In der Konsole hatte ich bei verwendung von Random das selbe Problem (bei Math.random() dagegen nicht).

Kann es sein, dass das Verfahren (mit Systemzeit) etwas damit zu tun hat?
Wenn ja, wie kann ich das Problem beheben? Math.random gibt es ja bei ME leider nicht!


```
int zufallszahl(int max)
{
        Random random = new Random();
        int zahl1 = Math.abs(random.nextInt()/100), potenz = 1;
	    
        for (int i = 0; i < (String.valueOf(zahl1).length()); i++)
	potenz = potenz*10;
	    
	return (zahl1*max)/potenz;	
}
```

Gruß

Fleckenteufel

_[Edit by Beni: es ist eine ME-Frage, also gehört es auch ins ME-Subforum ;-) ]_


----------



## doctus (8. Feb 2007)

ich weiß zwar nicht genau, wie die random()-methoden aufgebaut sind, aber das manche zahlen öffter vorkommen ist eine sache der wahrscheinlichkeitsrechnung. je öffter du eine zufallszahl erstellst, desto mehr nähern sich die vorkommen der einzellnen zahlen an.


----------



## SlaterB (8. Feb 2007)

Math.random:

```
public static double random() {
        if (randomNumberGenerator == null) initRNG(); [Klasse Random, statisch]
        return randomNumberGenerator.nextDouble();
    }
```

wenn du ein Random-Objekt erzeugst, kannst du es bis in alle Ewigkeit benutzen und es wird immer gute Zahlen liefern

dagegen ständig neue Random-Objekte zu erzeugen ist einerseits unnötig,
anderseits vielleicht auch die Quelle für dein Problem,


bei mir scheint das im kurzen Test nicht aufzutreten,
mein Random (Java 1.5 wohl) benutzt die sehr genaue System.nanoTime() als Startwert,

aber es besteht die Gefahr, dass du mehrere gleiche Objekte erzeugst und dann die gleichen Zufallszahlen erhälst


----------



## Chris_1980 (8. Feb 2007)

weiß ja nicht genau ob die Klasse Random alle Methoden hat wie in der großen Version, aber wenn kannst du auch so den Bereich zwischen 1 u. max einstellen:


```
private  Random random = new Random(); 



int zufallszahl(int max) 
{  
     int zahl1 = random.nextInt(max)+1;
     return zahl1;    
}
```


----------



## Gast (9. Feb 2007)

Hallo,
danke erst mal für die Antworten.
Ich werde den letzteren Code gleich mal testen. - Die Methode "random.nextInt(max)" gibt es erst seit CLDC 1.1, deshalb ist es mir gar nicht aufgefallen.

Gruß

Fleckenteufel


----------



## Gast (11. Feb 2007)

Hallo,
mit dem letzten Code hat es geklappt. 
Einfach nur die Erstellung des Random-Objektes aus der Methode rauszunehmen hat komischerweise nicht gereicht.

Gruß

Fleckenteufel


----------

