# Randomgenerator liefert immer wieder die selben Zahlen



## Guest (14. Dez 2007)

Hallo erst mal an alle. 
Ich habe mich in diesem Forum registiert, weil ich mit der Java Me Programmierung (fürs Handy eben) anfangen möchte. 
Ich nutze die Version 6.0 von Net Beans IDE.
Für mein erstes Programm habe ich mir überlegt einen kleinen Zufallsgenerator zu programmieren. (den Quellcode dazu habe ich ebenfalls hier gefunden )

```
java.util.Random rd = new java.util.Random(); 
int zufallszahl = rd.nextInt(10);
alert = new Alert (""+zufallszahl);
```
Der Benutzer soll einen Knopf drücken, worauf hin die Zufallszahl angezeigt wird.
Mein Problem ist nun, dass der Zufallsgenerator, so wie er jetzt geschrieben ist immer wieder die selbe Zahl ausspuckt (wenn man den Knopf mehrmals hinter einander drückt).
Erst wenn man die Applikation beendet und dann wieder neu gestartet hat wird einen andere Zahl angezeigt. 
Ich denke mal das es etwas mit der Erzeugung des Random Objektes zu tun hat. 
Ich als Anfänger weiß aber natürlich nicht, wie ich diese Problem beheben soll. Ich hoffe ihr könnt mir helfen.

Danke schon mal im Voraus.

Gruß Cardmaster


----------



## Marco13 (15. Dez 2007)

Hallo Gast  :bae: 

Die erste Frage gleich mit "RTFM" zu beantworten wäre wohl ... naja  :? Aber der dezente Hinweis auf die (doch recht ausführliche und meistens erschöpfende) Doku - in diesem Fall 
http://java.sun.com/j2se/1.4.2/docs/api/java/util/Random.html
ist wohl doch angebracht.

Mit
java.util.Random rd = new java.util.Random(System.currentTimeMillis()); 
bekommst du die gleiche Zahlenfolge ("fast" nur(!)) dann, wenn du das Programm startest, dann die PC-Uhr zurückstellst und es (auf die Millisekunde genau) zum gleichen Zeitpunkt nochmal den Button klickst....


----------



## Cardmaster (15. Dez 2007)

Danke schon mal für die schnelle Antwort.
Dennoch ist das Problem mit dem veränderte Programm:

```
java.util.Random rd = new java.util.Random(System.currentTimeMillis()); 
int zufallszahl = rd.nextInt(10);
           
alert = new Alert (""+zufallszahl);
```
nicht behohben.
Das wiederhohlte Ausgeben der selben Zahl bleibt immer noch bestehen.
Ich bin ratlos.
Hoffe ihr wisst noch eine andre Lösung.


----------



## Backwardsman (15. Dez 2007)

benutzt du den emulator oder besteht das problem auf einem echten gerät?? im emulator sollte es auf jeden fall funktionieren!?


----------



## Cardmaster (15. Dez 2007)

Sowohl im Emulator, als auch auf meinem eignen Handy funktioniert es nicht richtig.

Ich habe noch einmal sicherheitshalber hier zwei Bilder vom Verlauf des Programms angefügt











Wenn das Programm geladen ist soll der Benutzer nur noch einen Knopf ("STARTEN") drücken, damit der Zufallsgenerator startet. Nach der Ausgabe soll er dann die Möglichkeit haben wieder einen neuen Durchlauf zu starten.

Das Problem liegt daran, dass dem Zufallsgenerator keine neuen Startwerte übergeben werden. Er nimmt immer wieder den selben und somit kommt natürlich auch immer wieder das selbe heraus.
Könnte es sein, das ich da beim Ablauf des Programms etwas falsch mache ?


----------



## Gast (15. Dez 2007)

bevor man so etwas programmiert, probiert man doch erstmal aus, wie die zufallszahlen erzeugt werden!? also so mach ich das zumindest... mach dochmal eine ganz einfaches midlet a la hello world, ohne canvas und schnick schnack und lass dir die zufallszahlen im emulator auf der konsole ausgeben, das sind nur eine hand voll zeilen und man findet so viel leichter den fehler, der sich bei dir eingeschlichen hat!


----------



## Cardmaster (15. Dez 2007)

Es sind ja nur 4 Zeilen Code. Viel weniger geht doch nicht.


----------



## Guest (17. Dez 2007)

ja genau, deswegen muss dein fehler ja auch irgendwo anders liegen!


```
import java.util.Random;

import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class RandTest extends MIDlet {
	public RandTest() {}
	protected void destroyApp(boolean arg0) throws MIDletStateChangeException {}
	protected void pauseApp() {}

	protected void startApp() throws MIDletStateChangeException {
		Random rnd = new Random(System.currentTimeMillis());
		while (true) {
			System.out.println(rnd.nextInt());
			try {
				Thread.sleep(500);
			} catch (InterruptedException e) {}
		}
	}
}
```
also dieses midlet gibt im 0.5 sekunden takt pseudozufallszahlen aus, welche bei jedem start der andwendung auch anders aussehen!


----------



## Cardmaster (19. Dez 2007)

Vielen Dank für diese Antwort hat mir sehr geholfen.
Nunist mein Problem, wie ich diese Zufallszahl auf den Bildschirm ausgegeben kann. Mit der Funktion System.out.println() 
geht das ja nur auf dem PC sichtbar.


----------



## Backwardsman (19. Dez 2007)

naja, da kommts drauf an, ob du die high- oder low level GUI benutzt. bei der high level, kannst du einfach mit einem StringItem arbeiten bei der low level kannst du mit Graphics.paintString() einfach die Zahl auf eine Canvas zaubern ;-)

... oder mit beidem kompiniert, siehe CustomItem


----------



## Cardmaster (19. Dez 2007)

Oh, ich als Anfänger weiß das natürlich nicht genau. Wo kann ich das nachlesen (welche GUI ich benutze) ?

Wie müsste ich das dann schreiben ? Fehlen noch irgendwelche Bibliotheken, die ergänzt werden müssen ?


----------



## Backwardsman (20. Dez 2007)

nein beide bibliotheken sind standardmäßig dabei. mit der high-level gui geht alles ganz einfach, fertige komponenten zusammenbasteln. bei der low level gui hat man einfach nur eine leinwand (canvas) auf der mal rum"malen" kann, also wortwörtlich! ist alles eine sache des aufwands bzw. wie individuell du deine gui gestalten willst, wenn du einfach nur zufallszahlen anzeigen willst geht das mit deinen guis relativ schnell.

mmhh, kann dir jetzt keine guten seiten und links nennen, ich kann da nur bücher empfehlen, wie z.b. das vom dieter schmatz.


----------



## Cardmaster (22. Dez 2007)

Also ich konnte das jetzt in Netbeans mit String Item auf den Handybildschirm ausgeben. Der Buchvorschlag :###   hört sich ziemlich gut an, da hab ich jetzt schon was für meinen Geburstag  (für Weihnachten ist ja schon alle Verwandschaft mit Geschenken eingdeckt :wink:  ). Danke noch mal.

Jetzt wollte ich einfach mal zum Spaß "Copyright by Cardmaster" ausgeben lassen.


```
stringItem = new StringItem("Coypright by Cardmaster", null);
```

Im Emulator auf meinem Pc hat das auch wunderbar funktioniert.





Als ich das ganze nun auch auf mein Handy übertragen hatte und das Programm startete war da jetzt nur noch das Bild zu sehen und drunter stand "Copyright by" das "Cardmaster" war verschwunden. Zur Information mein Handy ist ein L6 von Motorola (das Teil, was es letztens bei Aldi gab).
Jetzt ist natürlich meine Frage, wieso zeigt der Emulator das ganz ordnungsgemäß an und mein Handy frisst das letzte Wort ? Das kann ja eigentlich nicht am Herstellertyp liegen oder ?
Ich hoffe ihr könnt mir helfen .


----------



## Cardmaster (22. Dez 2007)

Ah Problem gelöst. Mein Fehler war, dass ich den eigentlichen Text, der ausgegeben werden sollte in die Zeile, wo man die Überschrift schreibt geschrieben habe  :idea: . Der Emulator ist damit zwar zurecht gekommen, aber mein Handy halt nicht. In der Zeil unten drunter steht der Bezeichner <null> und da muss der richtige Text eingetippt werden (für alle die mit NetBeans anfangen wollen). 

Java-forum.org rules!!


----------



## Ellie (22. Dez 2007)

Off-topic: Welchen Editor benutzt du?


----------



## Cardmaster (23. Dez 2007)

Ich benutze das NetBeans IDE 6.0.


----------



## Cardmaster (23. Dez 2007)

--


----------

