Java permutierte Folge ohne Null in Array

raffiSSL

Lt. Junior Grade
Registriert
Feb. 2006
Beiträge
289
Hallo, ich verzweifel hier echt langsam. Habe jetzt sogar eine Vorgabe, aber obwohl ich fast alles genauso habe (bis auf die Variablen und die ausgelagerte Methode zur Berechnung der Zufallszahl r) spuckt er bei mir ständig Nullen mit aus. Wo liegt mein Fehler? Nullen sind deshalb unerwünscht, weil das Feld so geordnet werden soll, das am Ende alle Zahlen an der Stelle stehen wo sie hingehören.

Code:
public int[] Permutation (int i) {
         int z,r;  //z...Zählvariable (einzuordnende Zahl), r...Zufallszahl (Stelle an der z
                      eingeordnet werden soll)
         int[] feld = new int[i];
         for (z = 1; z < i; z++) {
             r = (int)((Math.random()*z)+1); //Ermittlung der Stelle an der geprüft wird
             while (feld[r] == 0) {                  //Überprüfung ob an Stelle r schon etwas steht
                 feld[r] = z;
                }
            }
         return feld;
        }

Danke schonmal :D
 
Dein Zufallszahlengenerator ist falsch!
Falls du auch an der Montanuni studierst (mir kommt dieses Bsp sehr bekannt vor): Prof. Seifter sieht diesen Zufallszahlengenerator nicht gerne. (weiß nicht mehr warum genau)

Im Skriptum ist der richtige.

ZAHL=a+(int)(Math.random()*(b-a+1));
Wobei a und b die Schranken sind.

Sonst kann ich nicht wirklich darin irgendetwas finden.

Verwenden hin und wieder den self-made Debugger: system.out.println("berechnetezahl");
 
Du gehst auch davon aus, dass der Zufallsgenerator "i" unterschiedliche Zahlen liefert. Das ist jedoch nicht der Fall. Wenn bei dir der Zufallsgenerator eine Zahl mehrmals liefert, so wird diese nur beim ersten mal im Array abgespeichert. Beim zweiten mal wird die Zahl dann einfach verworfen, dafür wird aber ein Array-Element nie gefüllt.

Code:
public int[] Permutation (int i) {
	int z,r;  				//z...Zählvariable (einzuordnende Zahl), r...Zufallszahl (Stelle an der z eingeordnet werden soll)
	int[] feld = new int[i];
	while (z < i) {
		r = (int)((Math.random()*z)+1);	// Ermittlung der Stelle an der geprüft wird
		if (feld[r] == 0) {		// Überprüfung ob an Stelle r schon etwas steht
			feld[r] = z;
			z = z + 1;
		}
	}
	return feld;
}

Das ganze hier ist ungetestet - zumal ich mir nicht sicher bin, ob der Quellcode Java oder C# sein soll - sollte aber funktionieren. Außerdem sollte man ein "while" nicht als "if" missbrauchen ;)

EDIT: OK man sollte den Titel lesen, das ganze soll also Java sein. Ich hab das Beispiel noch schnell zu Java kompatibel gemacht.
 
Zuletzt bearbeitet:
Zurück
Oben