Methoden Befehle in zufälliger Reihenfolge ausführen lassen

RowdyN

Mitglied
Hallo Leute und allen ein Frohes Fest,
wie bereits erwähnt würde ich gerne mehrere Befehle in Folge in zufälliger Reihenfolge ausführen lassen. Habe es bereit häufiger probiert und das beste was dabei herrausgekommen ist schaut so aus 🙂
Java:
public class Test
{
    private Square a3;
    private Square a4;
    private Square a5;
    private int nr[];

    public Test (int nr[])
    {

        a3=new Square();
        a4=new Square();
        a5=new Square();

        for(int t = 0; t < 6; ++t){
            boolean vergeben = true;
            while(vergeben){
                nr[t] = (int)(Math.random() * 6.0);
                vergeben = false;
                for(int r = 0; r < t; ++r)
                    if(nr[r] == nr[t]) vergeben = true;
            }
        }
        for(int t = 0; t < 6; ++t){
            a3.slowMoveHorizontal(3);
            a4.slowMoveHorizontal(4);
            a5.slowMoveHorizontal(5);
            a3.changeColor("a");
            a4.changeColor("b");
            a5.changeColor("c");
        }
    }
}

Was muss ich ändern damit es doch noch funktioniert?
Mit freundlichen Grüßen
RowdyN
 
Auch dir ein frohes Fest 🙂

Finde deinen Ansatz nicht wirklich schlüssig.
Außerdem solltest du nr als ganzes initialisieren, bevor du auf einzelne Indizes zugreifst.

Ich weiß nicht, ob es einen klassischen Weg gibt, Befehle in zufälliger Reihenfolge auszuführen, aber du könntest bspw. jeden Befehl in einem eigenen Thread starten und jeder Thread schläft zu Beginn erst einmal eine zufällige Zahl an (Mili)Sekunden.

Oder du knüpfst jeden Befehl an ein Objekt (bspw. eine Action-Listener-artige Klasse, bei der jede Instanz eine action-Methode implementiert), schmeißt diese Objekte in ein Array und generierst dir mittels random-Zahlen eine Reihenfolge, in der du die Indizes abarbeitest.

...

Das mit den Threads ist erst einmal unkomplizierter.
 
Danke für deine Antwort. Die Idee mit der Array-List hatte ich auch schon und die mit den Thread's werde ich wohl ausprobieren 🙂 Habe jetzt schon einen weiterren Versuch gestartet, bei dem mit aber Java immer die Fehlermeldung "orphaned case" ausgibt 🙁 Vllt hast du da eine Ahnung wie ich das lösen kann.

Java:
public class Testt
{
    private Square a3;
    private Square a4;
    private Square a5;

    public Testt ()
    {

        a3=new Square();
        a4=new Square();
        a5=new Square();

        Random rand = new RANDOM();

        While(true);
        {
            Int zufall = rand.nextInt(5);
            Switch zufall;
            {
                case 0 :a3.slowMoveHorizontal(3)break;
                case 1 :a4.slowMoveHorizontal(4)break;
                case 2 :a5.slowMoveHorizontal(5)break;
                case 3 :a3.changeColor("a")break;
                case 4 :a4.changeColor("b")break;
                case 5 :a5.changeColor("c")break;               
            }
        }
    }
}

Ach ja mein erster Ansatz wurde duch die Zeile
int nr[9];
blockiert. Hätte natürlich
int[] nr = new int[9];
heißen müssen. Bin in C/C++ abgerutscht 😛
Hat aber so oder so nicht funktioniert.

Mfg
RowdyN
 
Probier den Ansatz mit den Threads bitte erst gar nicht aus, das ist ein extrem furchtbarer missbrauch von Threads, welcher zu starken Synchronisationsproblemen führen kann, den Ablauf extrem unnötig verlangsamt und außerdem dein Problem nicht wirklich löst.
 
Das solltest du klein schreiben 😉
Das int auch.
Selbiges bei while
switch(zufall){ //code...}
case 0 :a3.slowMoveHorizontal(3)break;
case 1 :a4.slowMoveHorizontal(4)break;
case 2 :a5.slowMoveHorizontal(5)break;
case 3 :a3.changeColor("a")break;
case 4 :a4.changeColor("b")break;
case 5 :a5.changeColor("c")break;
Hier fehlen die ; nach jeder Funktion (a4.slowMoveHorizontal(4); break; )😉
 

Zurück
Oben