왜 랜덤을 쓰는데 계속 "hello world"가 출력되요?
조회수 2820회
발생하는 문제 및 실행환경
밑에 소스코드에서 항상 "hello world"가 출력되는데 이유가 뭔가요?
소스코드
System.out.println(randomString(-229985452) + " " + randomString(-147909649));
public static String randomString(int i)
{
Random ran = new Random(i);
StringBuilder sb = new StringBuilder();
while (true)
{
int k = ran.nextInt(27);
if (k == 0)
break;
sb.append((char)('`' + k));
}
return sb.toString();
}
1 답변
-
랜덤이라는게 시드 값에 따라서 임의의 수를 생성하는 알고리즘이에요. 그래서 시드가 똑같으면 똑같은 패턴으로 수가 생성되는거에요. 여기선 시드 값을 -229985452로 했는데 new Random(-229985452).nextInt(27) 이러면 발생하는 수가
8 5 12 12 15 0
이렇게 되고 new Random(-147909649).nextInt(27)에선 발생하는 수는
23 15 18 12 4 0
이고 '`'는 아스키 코드값이 96인데 그럼 결국 밑에처럼 "hello world"가 나오는 거죠.
8 + 96 = 104 --> h 5 + 96 = 101 --> e 12 + 96 = 108 --> l 12 + 96 = 108 --> l 15 + 96 = 111 --> o 23 + 96 = 119 --> w 15 + 96 = 111 --> o 18 + 96 = 114 --> r 12 + 96 = 108 --> l 4 + 96 = 100 --> d
댓글 입력