Java ME Mehrere Random´s geben immer die gleiche Zahl zurück

Hi, ich habe in einem Programme das ich mit Java ME geschrieben habe follgende Klasse.

Java:
package hello;

import java.util.Random;
import javax.microedition.lcdui.Graphics;

public class Enemie {

    int x, y;
    public Enemie(int width) {
        respawn(width);
    }

    public void respawn(int width) {
        Random r = new Random();
        int izufallszahl = r.nextInt(width);
        x = izufallszahl-MainCanvas.imageEnemie.getWidth()/2;
        y = -MainCanvas.imageEnemie.getHeight();
    }

    public void draw(Graphics g) {
        g.drawImage(MainCanvas.imageEnemie, x, y, Graphics.LEFT | Graphics.TOP);
    }
}

Von dieser Klasse habe ich mehrere Objekte in Form eines Arrays erzeugt. Eigendlich sollte jetzt bei jedem Aufruf der Methode "respawn()" der x-Wert des jeweiligen Objekts auf einen zufälligen Wert zwischen 0 und width gesetzt werden. Das Problem ist, dass aber bei allen Objekten der x-Wert auf die selbe Zahl gesetzt wird. An was liegt das?

Hier noch das Codestück in dem die "respawn()" Methode aufgerufen wird.

Java:
for(byte b=0;b<enemieAnzahl;b++) {
    enemie[b].y += enemieSpeed;
    if(enemie[b].y>getHeight()) {
        enemie[b].respawn(getWidth());
    }
    enemie[b].draw(g);
}
 

Cage Hunter

Aktives Mitglied
Jo das denke ich auch...
Allgemein kann ich immer empfehlen dir die betroffenen Codezeilen immer mit nem System.out.println(); ausgeben zu lassen um das eingrenzen zu können...
Da "nextInt()" immer eine ganze Zahl aus dem übergebenen Wertebereich liefert, muss es eigentlich am übergebenen Wert liegen...
Vermutlich holst Du Dir die Breite von der falschen Stelle...

Ich hab mal eben in nem alten Beleg nachgesehn (Hau den Maulwurf^^) und da mach ich das mit "Display.getDisplay(midlet)", ka es funktioniert jedenfalls :)
 

tfa

Top Contributor
Werden die Konstruktoren schnell hintereinander aufgerufen? Falls ja, haben sämtliche Random-Objekte den selben Start-Wert (Seed), da hierfür defaultmäßig der aktuelle Zeitstempel genommen wird. Das ist allerdings auch von der Java-Version bzw. Implementierung der API abhängig. In einem aktuellen Sun-Java V 1.6 sollte das eigentlich klappen.
 
getWidth() liefert 240. Daran kann es also nicht liegen.

Werden die Konstruktoren schnell hintereinander aufgerufen? Falls ja, haben sämtliche Random-Objekte den selben Start-Wert (Seed), da hierfür defaultmäßig der aktuelle Zeitstempel genommen wird. Das ist allerdings auch von der Java-Version bzw. Implementierung der API abhängig. In einem aktuellen Sun-Java V 1.6 sollte das eigentlich klappen.

Ja, bei allen Enemie Objekten werden nacheinander die respawn() Methode ausgeführt in der die Zufallszahl erzeugt wird. Daran muss es liegen.
 
Zuletzt bearbeitet:

XHelp

Top Contributor
dann stell am besten ein KSKB rein. Ich bezweifle, dass deine Randoms alle die gleichen Zahlen liefern. Oder mach eben Debugausgaben rein um deine Aussage zu bestätigen.
 
Es lag an dem was "tfa" gesagt hat. Ich hab jetzt einfach nur ein Random-Objekt erzeugt und dass in der respawn()-Methode als Parameter übergeben, jetzt funktioniert alles wie es soll.

Danke nochmal an euch alle :).
 

The_S

Top Contributor
In einem aktuellen Sun-Java V 1.6 sollte das eigentlich klappen.

Gestaltet sich bei Java ME auf dem Handy eher schwierig ;) .

Es lag an dem was "tfa" gesagt hat. Ich hab jetzt einfach nur ein Random-Objekt erzeugt und dass in der respawn()-Methode als Parameter übergeben, jetzt funktioniert alles wie es soll.

Danke nochmal an euch alle :).

Jop, genau so sollte/muss man es bei Java ME machen :) .
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
ruutaiokwu `build.gradle` so konfigurieren dass es mehrere .jar's z.b. mit org.junit erlaubt, oder... Android & Cross-Platform Mobile Apps 11
A Mehrere EditText-Komponenten sollen zusammenarbeiten Android & Cross-Platform Mobile Apps 2
L Musikplayer mehrere Aktivities Android & Cross-Platform Mobile Apps 6
M mehrere URLs in einem AsyncTask abarbeiten Android & Cross-Platform Mobile Apps 2
D Android "mehrere" Fragmente erstellen + richtige Zuordnung. Aber wie? Android & Cross-Platform Mobile Apps 1
A Mehrere Fehler beim Compilieren Android & Cross-Platform Mobile Apps 4
C Android Code in mehrere .java verteilen Android & Cross-Platform Mobile Apps 6
P EditText mehrere Zeilen - verschiedene Farbe Android & Cross-Platform Mobile Apps 3
R Android Mehrere TabHosts im gleichen Projekt Android & Cross-Platform Mobile Apps 4
H Mehrere Activities (Android) Android & Cross-Platform Mobile Apps 4
J Mehrere Plattformen Android & Cross-Platform Mobile Apps 2
I Java Handy - mehrere Programme gleichzeitig Android & Cross-Platform Mobile Apps 8
D Mehrere Kopien von einer Form Android & Cross-Platform Mobile Apps 7
M Android Objekt weiter geben Android & Cross-Platform Mobile Apps 13
D Java ME Bild vom Web-Service aus zurück geben Android & Cross-Platform Mobile Apps 8
K Verständisfrage bzgl. Buttons und ihnen eine Funktion geben. Android & Cross-Platform Mobile Apps 3

Ähnliche Java Themen

Neue Themen


Oben