2016-12-09 2 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에서 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'도이 경우에 똑같이 작동합니까? –

관련 문제