トラック
/
Java
Java
/
演習
/
船長日誌
船長日誌

船長日誌

学習演習

はじめに

乱数

java.util.Randomクラスのインスタンスを使うと、Javaで乱数を生成できます。

整数の乱数

整数の乱数は、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

説明

Maryはテレビシリーズ_スター・トレック:新世代_の大ファンです。 彼女はよく、友人たちと一緒に_宇宙船エンタープライズ_の乗組員になりきって遊ぶ、ペンと紙のロールプレイングゲームをします。 Maryが演じるキャラクターはピカード艦長なので、艦長日誌を付けることになります。 彼女はゲームの創造的な部分が大好きですが、その場でランダムなデータを作るのは苦手です。

艦長日誌によく登場するデータをランダムに生成する仕組みを作って、Maryを手伝いましょう。

Note

この演習のスターター実装は、java.util.Randomのインスタンスをコンストラクターの引数として受け取ります。 これにより、演習のテストでは、あらかじめ決められたシードを持つインスタンスを渡せるようになり、テスト結果が予測可能になります。

そのため、実装では、与えられたjava.util.Randomのインスタンスを使うことが求められます。

1. ランダムな惑星を生成する

_宇宙船エンタープライズ_は、旅の途中でたくさんの惑星と出会います。 スタートレックの世界では、惑星はその性質によっていくつかのクラスに分けられています。 たとえば、地球はクラスMの惑星です。 惑星のクラスは、D、H、J、K、L、M、N、R、T、Yのいずれかです。

randomPlanetClass()メソッドを実装しましょう。 このメソッドは、惑星のクラスをランダムに1つ返します。

captainsLog.randomPlanetClass();
// => "K"

2. ランダムな宇宙船の登録番号を生成する

宇宙を飛び回っているのはエンタープライズ(登録番号NCC-1701)だけではありません! 別の宇宙船とランデブーしたとき、Maryはその宇宙船の登録番号を日誌に記録する必要があります。

登録番号は「NCC-」という接頭辞で始まり、そのあとに1000から9999までの数値(両端を含む)が続きます。

ランダムな宇宙船の登録番号を返すrandomShipRegistryNumber()メソッドを実装しましょう。

captainsLog.randomShipRegistryNumber();
// => "NCC-1947"

3. ランダムな宇宙暦を生成する

日付のない日誌に、なんの意味があるでしょうか?

宇宙暦は小数です。 _宇宙船エンタープライズ_の冒険のうち、_新世代_のシーズン1の物語は、宇宙暦41000.0から42000.0の間に起こります。 「4」は24世紀を、「1」はシーズン1を表しています。

41000.0以上42000.0未満の小数を返すrandomStardate()メソッドを実装しましょう。

captainsLog.randomStardate();
// => 41458.15721310934
GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
Java Exercism

船長日誌を始める準備はできましたか?

Exercismに登録すれば、26個のコンセプト158個の演習、そして本物の人間によるメンタリングとともに、Javaを学んでマスターできます。すべて無料です。