Если нужно упорядочить массив чисел, можно применить метод sort() из класса Arrays.
int[] a = new int[10000]; |
|
... |
|
Arrays.sort(a); |
Этот метод использует усовершенствованную версию алгоритма быстрой сортировки, которая считается наиболее эффективной для большинства наборов данных.
Класс Arrays содержит несколько удобных методов, предназначенных для работы с массивами. Эти методы приведены в конце данного раздела. Программа, код которой будет представлен в конце статьи, создает массив и генерирует случайную комбинацию чисел для лотереи. Например, если нужно выиграть "5 из 35", программа может вывести следующее сообщение:Попробуйте такие числа, и станете богатым.
4, 11, 23, 25, 34 |
Чтобы выбрать случайные числа, массив numbers сначала заполняется числами 1, 2,..., n:
int[] numbers = new int[n]; |
|
for(int i = 0; i < numbers.length; i++) |
|
numbers[i] = i+1; |
Второй массив предназначен для хранения сгенерированных чисел:
int[] result = new int[k]; |
Теперь сгенерируем k чисел. Метод Math.random() возвращает случайное число с плавающей точкой, лежащее в интервале от 0(включительно) до 1(это значение не принадлежит интервалу). Умножая результат на число n, получим случайное число, лежащее между 0 и n-1.
int r = (int) (Math.random() * n); |
Присвоим i-е число i-му элементу массива. Сначала там будет помещено само число n, однако, как будет показано ниже, содержимое массива number будет изменяться после генерации каждого нового числа:
result[i] = numbers[r]; |
Теперь вы должны убедиться, что ни одно число не повторится - все номера должны быть разными. Следовательно, нужно поместить в элемент number[r] последнее число, содержащееся в массиве, и уменьшить n на единицу.
numbers[r] = numbers[n - 1]; |
|
n-- |
Обратите внимание на то, что при каждой генерации мы получаем индекс, а не само число. Этот индекс относится к массиву, содержащему числа, которые еще не были выбраны.
После генерации k номеров полученный массив сортируется, чтобы результат выглядел более элегантно:
Arrays.sort(result); |
|
for(int i = 0; i < result.length; i++) |
|
System.out.println(result[i]); |
import java.util.Arrays;
import java.util.Scanner;
public class LotteryDrawing { |
|
|
|
public static void main(String[] args) { |
|
Scanner in = new Scanner(System.in); |
|
System.out.println(" ? "); |
|
int k = in.nextInt(); |
|
|
|
System.out.println(" ? "); |
|
int n = in.nextInt(); |
|
|
|
// 1 2 3 ... n |
|
int[] numbers = new int[n]; |
|
for(int i = 0; i < numbers.length; i++) |
|
numbers[i] = i+1; |
|
|
|
// k |
|
int[] result = new int[k]; |
|
for(int i = 0; i < result.length; i++) { |
|
// 0 n - 1 |
|
int r = (int) (Math.random() * n); |
|
|
|
// |
|
result[i] = numbers[r]; |
|
|
|
// |
|
numbers[r] = numbers[n - 1]; |
|
n--; |
|
} |
|
// |
|
Arrays.sort(result); |
|
System.out.println(" "); |
|
for(int r : result) |
|
System.out.println(r); |
|
} |
|
|
|
} |