Randomgenerator liefert immer wieder die selben Zahlen

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
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 )
Code:
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

Top Contributor
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

Mitglied
Danke schon mal für die schnelle Antwort.
Dennoch ist das Problem mit dem veränderte Programm:
Code:
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

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

Cardmaster

Mitglied
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
Flow.jpg


flow2.jpg


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 ?
 
G

Gast

Gast
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!
 
G

Guest

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

Code:
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

Mitglied
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

Bekanntes Mitglied
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

Mitglied
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

Bekanntes Mitglied
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

Mitglied
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.

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

Im Emulator auf meinem Pc hat das auch wunderbar funktioniert.

Emulatorbild.jpg

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

Mitglied
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!!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Android Auf ImageView aus einem anderen Thread zugreifen liefert Fehlermeldung (App stürzt ab) Android & Cross-Platform Mobile Apps 5
ruutaiokwu Android Warum muss man bei Android Studio immer 2x auf "Run" klicken damit die App auf dem Gerät startet Android & Cross-Platform Mobile Apps 8
W Android Browser startet immer, bevor die Daten dafür geholt wurden Android & Cross-Platform Mobile Apps 15
C SQLite Datenbank in Kotlin - App stürtzt immer ab Android & Cross-Platform Mobile Apps 0
TheWhiteShadow Android Class.getResource immer null Android & Cross-Platform Mobile Apps 6
R Android incomingNumber bein Eingehenden Anruf immer leerer String Android & Cross-Platform Mobile Apps 4
N Android tabhost: immer nur tab1 sichtbar Android & Cross-Platform Mobile Apps 4
K Zeitstopp-App, immer dann aktiv, wenn Handy an - wie vorgehen? Android & Cross-Platform Mobile Apps 4
N Android bei textview.settext immer abbruch Android & Cross-Platform Mobile Apps 4
N Textview macht immer nach einem Beistrich einen Abstand Android & Cross-Platform Mobile Apps 6
X AVD stüzt immer ab Android & Cross-Platform Mobile Apps 6
D Java ME Mehrere Random´s geben immer die gleiche Zahl zurück Android & Cross-Platform Mobile Apps 7
D Hashtable/Vector - immer nur letzter Eintrag vorhanden Android & Cross-Platform Mobile Apps 6
Kidao InputStream.available() liefer immer nur 0 Android & Cross-Platform Mobile Apps 8

Ähnliche Java Themen

Neue Themen


Oben