2016-12-09 15 views
0

私はランダムに生成する整数を配列に作成し、配列内の要素をランダム化することを練習しています。数字を印刷するとすべてがうまくいきますが、ランダム化された要素を表示しているときに印刷されない要素があるようです。私が去っていくステップはありますか?表示されていない要素があるのはなぜですか?

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] + " "); 
    } 
} 

答えて

5

あなたforループは、それが終了し、最初の配列要素をプリントアウトしないときi == 0を意味し、条件i > 0を持っています。

しかし、Fisher-Yatesのシャッフルを行っている場合、実際にはmyList.length-1から最初のコードが正しいようにする必要があります。同じループから配列内のすべての要素を印刷することはできません。後で別のループを使用して要素を印刷するか、後でSystem.out.print(myList[0]);を追加してください。

+0

ありがとうございます。このような小さなことのために、私はそのミスがどこにあったのか、何が何であったのかを認識できませんでした。私はそれを 'i> -1'に変更し、私が望むように印刷しました。どうしてこれなの? –

+1

'i> -1'で' i == 0'を実行するので、その要素も印刷できます。 – Iluvatar

2

例:条件がi > 0i = 4, 3, 2, 1のみとしない場合はi = 0、ありますのでときfor (int i = 4; i > 0; i--)

forループを実行します。 for (int i = myList.length - 1; i > 0; i--)i > 0の条件をi >= 0に変更すると、必要なものが得られます。

+0

これは私のコードを修正しました、ありがとうございます。この場合、 'i> -1'と' i> = 0'はどちらも同じ働きをするのはなぜですか? –

関連する問題