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

조회수 2817회

발생하는 문제 및 실행환경

밑에 소스코드에서 항상 "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 답변

  • 좋아요

    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
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)