왜 랜덤을 쓰는데 계속 "hello world"가 출력되요?


발생하는 문제 및 실행환경

밑에 소스코드에서 항상 "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();
    }
  • 2016년 01월 05일에 작성됨

조회수 264


1 답변


좋아요
0
싫어요
채택취소하기

랜덤이라는게 시드 값에 따라서 임의의 수를 생성하는 알고리즘이에요. 그래서 시드가 똑같으면 똑같은 패턴으로 수가 생성되는거에요. 여기선 시드 값을 -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
  • 2016년 01월 05일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close