2016-08-09 2 views
0

눈덩이를 페인트 볼로 취급하는 Bukkit 플러그인을 쓰고 있습니다. 실수로 사용했을 때Random.nextInt (16)가 제대로 작동하는 동안 Random.nextInt() % 16이 왜곡됩니까?

(byte) (random.nextInt() % 16) 

대신

(byte) (random.nextInt(16)) 

의 나는 낮은 숫자가 높은 숫자보다 더 많은 방법을 나타난 것으로 나타났습니다. 왜 그런 일이 일어날까요? 전 :

00010 
01200 
06001 
30010 
00502 

예 : 후 :

74108 
73447 
98956 
17386 
26574 
+0

코드가 사용자의 출력과 어떤 관련이 있는지는 명확하지 않습니다. 문제를 나타내는 [mcve]를 제공 할 수 있습니까? –

+0

어떤 연구를 수행 했습니까? 분포가 어떻게 발생하는지 히스토그램을 만들었습니까? 그것은 당신의 기대에 부합 했습니까? 행동을 설명하기 위해 어떤 가설을 세웠습니까? 바이트 캐스트가 관련 있다고 생각하십니까? 스택 오버플로는 "궁금한 점이 있습니다 - 물어 봅시다"가 아닌 최후의 수단이되어야합니다. –

+0

표시되는 숫자는 0-15 범위의 정수를 반환하기 때문에 어느 표현식에서도 올 수 없습니다. –

답변

3

random.nextInt()는 음의 값을 반환 할 수 있습니다 내 프로그램은 가의 기회를 배로 을 배가 0으로 네거티브를 치료했다 0이 발생합니다.

+0

좋은 캐치! 그리고 네,'% '연산자는 사람들을 속일 수 있습니다 - 많은 사람들이 생각하는 "모듈러스"를 의미하는 것이 아니라 "나머지"를 의미합니다. 차이점은 Remainder는 음수가 될 수 있지만 Modulo는 항상 양수입니다. –

관련 문제