Java에서는 java.util.Random 클래스의 인스턴스를 사용해 난수를 생성할 수 있어요.
nextInt() 메서드를 사용하면 정수 난수를 생성할 수 있어요.
이 메서드는 Integer.MIN_VALUE부터 Integer.MAX_VALUE까지의 값을 생성해요.
Random random = new Random();
random.nextInt();
// => -1169335537
생성되는 값의 범위를 제한하려면 nextInt(int)를 사용해요.
이 메서드는 0(포함)부터 주어진 상한(미포함)까지의 값을 생성해요.
예를 들어, 다음 코드는 0부터 9까지의 난수를 생성해요.
Random random = new Random();
random.nextInt(10);
// => 6
그리고 다음 코드는 10부터 19까지의 난수를 생성해요.
Random random = new Random();
10 + random.nextInt(10);
// => 11
nextDouble() 메서드를 사용하면 실수 난수를 생성할 수 있어요.
이 메서드는 0.0부터 1.0까지의 값을 생성해요.
Random random = new Random();
random.nextDouble();
// => 0.19250004204021398
그리고 다음 코드는 100.0부터 200.0까지의 난수를 생성해요.
Random random = new Random();
100.0 + 100.0 * random.nextDouble();
// => 111.31849856260328
메리는 TV 시리즈 _Star Trek: The Next Generation_의 열렬한 팬이에요. 친구들과 종이와 펜으로 하는 롤플레잉 게임을 자주 하는데, 이 게임에서 메리와 친구들은 _Starship Enterprise_의 승무원인 척을 하죠. 메리가 맡은 캐릭터는 피카르 함장이라서 함장 일지를 써야 해요. 메리는 게임에서 창의적인 부분을 좋아하지만, 그 자리에서 무작위 데이터를 만들어 내는 건 별로 좋아하지 않아요.
함장 일지에 자주 등장하는 데이터를 위한 무작위 생성기를 만들어서 메리를 도와줘요.
이 연습 문제의 스타터 구현은 java.util.Random 인스턴스를 생성자 인자로 받아요.
덕분에 이 연습 문제의 테스트는 미리 정해진 시드를 가진 인스턴스를 넘길 수 있고, 테스트 결과를 예측할 수 있게 해줘요.
따라서 구현할 때 제공된 java.util.Random 인스턴스를 사용해야 해요.
_Starship Enterprise_는 여행 중에 수많은 행성을 만나요.
스타트렉 세계관의 행성은 그 특성에 따라 등급이 나뉘어요.
예를 들어 지구는 M 등급 행성이에요.
가능한 모든 행성 등급은 D, H, J, K, L, M, N, R, T, Y예요.
randomPlanetClass() 메서드를 구현해요.
이 메서드는 행성 등급 중 하나를 무작위로 반환해야 해요.
captainsLog.randomPlanetClass();
// => "K"
Enterprise(등록 번호 NCC-1701)만 우주를 날아다니는 게 아니에요!
다른 우주선과 조우할 때면 메리는 그 우주선의 등록 번호를 일지에 기록해야 해요.
등록 번호는 "NCC-" 접두사로 시작하고, 그 뒤에 1000부터 9999까지(포함)의 숫자가 와요.
무작위 우주선 등록 번호를 반환하는 randomShipRegistryNumber() 메서드를 구현해요.
captainsLog.randomShipRegistryNumber();
// => "NCC-1947"
날짜도 없는 일지가 무슨 소용이 있을까요?
스타데이트는 부동소수점 수예요.
_The Next Generation_의 첫 시즌에서 _Starship Enterprise_의 모험은 스타데이트 41000.0과 42000.0 사이에서 펼쳐져요.
"4"는 24세기를, "1"은 첫 번째 시즌을 나타내요.
41000.0 이상 42000.0 미만의 부동소수점 수를 반환하는 randomStardate() 메서드를 구현해요.
captainsLog.randomStardate();
// => 41458.15721310934
Exercism에 가입하고 Java 트랙을 개념 26개연습 문제 158개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.