2017-02-18 1 views
1

이 보안 난수를 1로 변환하고 배열로 자동 재정렬하는 방법을 알지 못합니다.다음 코드를 이해할 수 없습니다.

SecureRandom secureRandom = new SecureRandom(); 

int [] array = new int[7]; 

for(int i=0; i<5;i++) 
{ 
    int random = 1+ secureRandom.nextInt(6); 
    array[random]=1+array[random]; 
    System.out.println(Arrays.toString(array)); 
} 

출력 :

[0, 0, 0, 0, 0, 1, 0] 
[0, 1, 0, 0, 0, 1, 0] 
[0, 1, 0, 0, 0, 1, 1] 
[0, 1, 0, 0, 0, 1, 2] 
[0, 2, 0, 0, 0, 1, 2] 
+0

의 사용해야합니다. –

+0

디버거의 코드를 단계별로 실행하여 코드의 각 행이 정확히 무엇인지 확인하는 것이 좋습니다. –

+0

'array [random]'이 어떻게 작동하는지 묻고 있습니까? –

답변

0

이 코드를 단계별로 살펴 보겠습니다.

먼저 SecureRandom() 인스턴스를 생성합니다. Javadocs에 따르면, 이것은 우리가 그들이 매우 무작위 될 것입니다 의미

강력하게 암호화 된 임의의 숫자

을 생성하게됩니다. 이 문제를 피하고 싶다면 pseudorandom number generators을 읽어보십시오.

SecureRandom secureRandom = new SecureRandom(); 

이제 우리는 처음에 0으로 설정된 7 개의 int 배열을 생성 할 것입니다.

int [] array = new int[7]; 

for 루프의 내용을 5 회 실행합니다.

for(int i=0; i<5;i++) 

루프의 시작을 포함하는 (1)과 (6) 사이의 랜덤 수를 취득하고 random에 할당한다.

int random = 1+ secureRandom.nextInt(6); 

이제 임의의 위치에서 배열을 증가시킵니다. random의 가능한 값 범위에 있지 않기 때문에 0 위치가 절대 업데이트되지 않는 방법에 유의하십시오.

각 루프의 끝에서 배열의 내용을 std-out에 인쇄합니다. 그러면 루프가 매번 요소를 증가시키는 것을 볼 수 있습니다. 이것은 또한 전체 어레이의 5 개의 프린트를 보는 이유이기도합니다. Arrays.toString은 배열을 쉼표로 구분 된 버전으로 변환합니다.

System.out.println(Arrays.toString(array)); 

편집 :

나는 당신의 의견에 이해하는 바로는

, 당신은 1 대신하여 배열 업데이트의 값은 임의의 숫자가 될 이유를 알고 싶습니다. 다음

어레이는 인덱스에 의해 표현된다 :

array: { array[0], array[1], array[2], array[3], array[4], array[5], array[6] } 

우리가 가진 배열 array[random] 액세스

, 우리는 인덱스로서 random를 사용하고있다. 무작위의 값을보고 위의 [ ]에있는 같은 번호와 일치시킵니다. 그런 다음 1 + array[random]라고 말하면 배열의 해당 위치에있는 값을 1으로 변경합니다.

편집 X2 :

int random = 1 + secureRandom.nextInt(6); 
int anotherRandom = 1 + secureRandom.nextInt(6); 
array[random] = anotherRandom; 
System.out.print(...); 

이 임의의 값으로 (거의) 임의의 위치의 값을 설정합니다 : 당신이 다른 출력을 원한다면, 당신은 할 수하기 위해 루프의 내용을 필요 가능한 범위의 동일한 범위 내에서

+0

이 [0, 0, 0, 0, 0, 1, 0] 대신에 알고 싶습니다. [0, 1, 0, 0, 0, 1, 0] [0, 1, 0, 0, 0 , 0, 0, 0, 0, 1, 2] [0, 1, 0, 0, 0, 1] 출력 [0, 0, 0, 0, 0, 5, 0] [0, 2, 0, 0, 0, 5, 6] [0, 2, 0, 0, 0, 0, 0, 5, 6] [0, 2, 0, 0, 0, 5, 6] –

+0

배열 길이가 100과 같이 7보다 크면 어떻게됩니까? 그것은 집계입니다 [int random = 1+ secureRandom.nextInt (6); ] 무작위 길이 1 ~ 6 배열 길이로? –

+0

원래 코드 또는 EDIT x2 코드의 난수 생성을 수정하지 않고 배열의 길이를 7 이상으로 만들면 배열 [1]부터 배열 [6]까지의 숫자 만 0이 아닌 숫자가됩니다. 새로운 위치 모두가 0으로 유지된다는 의미입니다. –

0

그것은 난수의 값은 어레이 .. 값이 지표로서 사용되는 기록되지 않은 코드로부터 명백하다. 첫 번째 배열에서 0이 있다고 가정하면 첫 번째 반복은 무작위 배열 요소 (0 요소 제외)에 1 + 0을 씁니다. 나중에 2 번째 반복에서 1 ~ 2, 3 ~ 1, 3 등으로 무작위 요소의 1 + 값이 될 수 있습니다.

0

이 주요 라인은 :

array[random]=1+array[random]; 

어떤 임의의 요소 1 개 + 0 처음되었다. 우리가 무작위로 두 번째로 얻을 때 - 1 + 1, 3 - 1 + 2 등이됩니다.

0

배열의 내용을 배열과 섞으면 위치는 무작위로 발견되며 내용은 무작위 위치의 내용 +1. 이 0 배열 내부 6 콘텐츠를 원한다면 당신은 내가 당신의 질문이 무엇인지 이해하고 있지 않다

array[random] = secureRandom.nextInt(6) 

대신

array[random]=1+array[random]; 
관련 문제