/**
* Generates random numbers, returning an array of ascending order.
* @param amount The amount of numbers to generate.
* @param max The maximum value to generate.
* @return An array of random integers of the specified length.
*/
public static int[] generateIncreasingRandoms(int amount, int max) {
int[] randomNumbers = new int[amount];
Random random = new Random();
for (int i = 0; i < randomNumbers.length; i++) {
randomNumbers[i] = random.nextInt(max);
}
Arrays.sort(randomNumbers);
return randomNumbers;
}
次のように使用できます。
// Generates 10 random numbers of value 0 to 100,
// printing them in ascending order
for (int number : generateIncreasingRandoms(10, 100)) {
System.out.print(number + " ");
}
または、あなたがマイクロ最適化のような人で、並べ替えをしたくない場合は、
/**
* Generates random numbers, returning an array of ascending order.
* @param amount The amount of numbers to generate.
* @param max The maximum value to generate.
* @return An array of random integers of the specified length.
*/
public static int[] generateIncreasingRandomWithoutSorting(int amount, int max) {
int[] randomNumbers = new int[amount];
double delta = max / (float)amount;
Random random = new Random();
for (int i = 0; i < randomNumbers.length; i++) {
randomNumbers[i] = (int)Math.round(i*delta + random.nextDouble() * delta);
}
return randomNumbers;
}
使用事例:
// Generates 10 random numbers of value 0 to 100,
// printing them in ascending order
for (int number : generateIncreasingRandomWithoutSorting(10, 100)) {
System.out.print(number + " ");
}
各数値が 0 から 10、10 から 20、20 から 30 の間である理由は、この使用例では、単純に範囲全体を考慮して最初の試行で 100 を取得すると、最終的には 100 になるためです。 100 の配列全体を使用します。
より制御されているため、このソリューションでは、連続する各数値の範囲を変更するため、求めているもの (「0 から 100 の 10 個の数値を昇順に並べ替え」) を実際に取得することはできません。(並べ替えを必要としない他のソリューションと同様)