2016-12-09 3 views
0

Ich übe das Erstellen einer zufallsgenerierenden Ganzzahl in einem Array, dann Randomisierung der Elemente im Array. Alles ist gut, wenn ich die Zahlen drucke, aber es scheint ein Element zu geben, das nicht druckt, wenn ich die randomisierten Elemente zeige. Gibt es einen Schritt, den ich weglasse?Warum wird ein Element nicht angezeigt?

public class shufflingArrays { 
public static void main(String[] args) { 


    int[] myList = new int[10]; 
    System.out.println("Numbers:"); 
    for(int i = 0; i < myList.length; i++) { 
     myList[i] = (int)(Math.random() * 100); 
     System.out.print(myList[i] + " "); 
    } 
    System.out.println("\nRandomized:"); 

    for (int i = myList.length - 1; i > 0; i--){ 
     //Generate index j randomly with 0 <= j <= i 
     int j = (int)(Math.random() * (i + 1)); 

     //Swap myList[i]; with myList[j] 
     int temp = myList[i]; 
     myList[i] = myList[j]; 
     myList[j] = temp; 
     System.out.print(myList[i] + " "); 
    } 
} 

Antwort

5

Ihre for Schleife hat i > 0 Zustand, das heißt, wenn es i == 0 wird beendet und nicht das erste Feldelement auszudrucken.

Wenn Sie jedoch die Fisher-Yates Shuffle tun, wie es scheint, müssen Sie tatsächlich von myList.length-1 auf 1 gehen, also war der ursprüngliche Code korrekt. Sie können dann nicht alle Elemente im Array von derselben Schleife aus drucken, verwenden Sie also entweder eine andere Schleife nach dem Ausdruck der Elemente oder fügen Sie danach System.out.print(myList[0]); hinzu.

+0

Vielen Dank. Für so eine kleine Sache konnte ich nicht erkennen, wo oder was der Fehler war. Ich änderte es zu "i> -1" und es druckte wie ich wollte. Warum ist das? –

+1

Mit 'i> -1 'wird dann für' i == 0 'ausgeführt, so dass auch dieses Element gedruckt werden kann. – Iluvatar

2

Ex: for (int i = 4; i > 0; i--)

die for Schleife laufen, wenn i = 4, 3, 2, 1 nur und nicht, wenn i = 0, weil die Bedingung i > 0 ist da. Ändern Sie die i > 0 Bedingung in for (int i = myList.length - 1; i > 0; i--) zu i >= 0 und Sie erhalten, was Sie wollen.

+0

Das hat meinen Code repariert, danke. Warum funktionieren "i> -1" und "i> = 0" in diesem Fall? –

Verwandte Themen