Zufallszahl

  • 4 Antworten
  • Letztes Antwortdatum
L

lumo2707

Neues Mitglied
0
Hi Leute,

ich habe eine Tabelle in der ersten Zeile stehen z.B. Spieler 1, Spieler 2, und Spieler 3.
In der ersten Spalte ebenso!
Die Tabelle drückt die Spielpaarungen! --> z.B. Spieler 1 gegen Spieler 2 usw.
Wenn der Spielernamen gleich ist, steht im dazugehörigen Feld ein "X"!

Bei 3 Spieler sieht das dann folgendermaßen aus:

x -:- -:-
-:- x -:-
-:- -:- x

In die Felder mit -:- werden die Ergebnisse eingetragen!

Das erste x hat die ID 0 das zweite 4, das dritte 8!
Jetzt möchte ich eine Methode, die mir zufällig ein Feld aus diesen auswählt und eins, das kein "X" hat es muss ein -:- Feld sein!

Ich hab schon was mit einer Zufallszahl von 0-8 innerhalb einer Do While schleife! Aber irgendwie kommt ich da nicht zu dem, was ich will :(

Bin ich auf dem richtigen Weg oder hat jemand eine bessere Idee wie man das machen könnte?

Vielen Dank!
 
Hi,

ich würde es mit zwei Zufallszahlen machen, die nicht die gleichen sein dürfen, da es sich um eine Diagonalmatrix handelt.

Beispiel:
int zeile = 0;
int spalte = 0;
int min = 0;
int max = 3;

Random r = new Random();
zeile = r.nextInt(max - min + 1) + min;

spalte = r.nextInt(max - min + 1) + min;
while(spalte == zeile){
spalte = r.nextInt(max - min + 1) + min;
}
Dann hast du eine Zufallszahl für die Spalte und eine für die Zeile.
Also array[zeile][spalte] ist dein Ergebnis.
 
Zuletzt bearbeitet:
Hi,

danke für deine Hilfe!

Leider versteh ich das nicht so :rolleyes2:
was sind die Variablen randomMonster1 und randomMonster2
Und was mach ich wenn ich diesem feld schon ein Ergebnis steht, als nicht -:-??
kann ich das noch abfragen?

meine Textview-Inhalte kann ich ja über m_TV[m].getText().toString() abfragen!
 
Ich würde folgendes vorschlagen:

Code:
import java.util.ArrayList;

public class Generator
{
    ArrayList<int[]> i_positions;
    public Generator(int width, int height)
    {
        i_positions = new ArrayList<int[]>();
        for (int x=0;x<width;x++)
        {
            for (int y=0;y<height;y++)
            {
                i_positions.add(new int[]{x,y});
            }
        }
    }
    
    public synchronized int[] getNext() throws IllegalStateException
    {
        if (i_positions.size()==0) throw new IllegalStateException("Keine freien Felder mehr");
        int index = (int)(Math.random()*i_positions.size());
        return i_positions.remove(index);
    }
}

Der Generator wird mit Breite und Höhe initalisiert und erzeugt je ein int[] mit den x,y Koordinaten jedes Feldes und speichert die in der ArrayList.

Bei getNext wählt er eines der Felder aus der ArrayList aus, entfernt es aus der Liste (da es nicht wieder ausgegeben werden soll, um doppelte zu vermeiden) und gibt es als int[] (x und y) Koordinate aus.

Wird getNext aufgerufen, wenn es keine freien Felder mehr gibt, wird eine IllegalStateException geworfen.

MfG Uwe
 
vor dem .add würde ich noch ein if (x != y) einbauen, damit schließt du die Felder aus die in deiner Tabelle ein X enthalten.
 
Zurück
Oben Unten