Если нужно упорядочить массив чисел, можно применить метод sort() из класса Arrays.
1 2 3 |
int[] a = new int[10000]; ... Arrays.sort(a); |
Этот метод использует усовершенствованную версию алгоритма быстрой сортировки, которая считается наиболее эффективной для большинства наборов данных.
Класс Arrays содержит несколько удобных методов, предназначенных для работы с массивами. Эти методы приведены в конце данного раздела. Программа, код которой будет представлен в конце статьи, создает массив и генерирует случайную комбинацию чисел для лотереи. Например, если нужно выиграть «5 из 35», программа может вывести следующее сообщение:Попробуйте такие числа, и станете богатым.
1 |
4, 11, 23, 25, 34 |
Чтобы выбрать случайные числа, массив numbers сначала заполняется числами 1, 2,…, n:
1 2 3 |
int[] numbers = new int[n]; for(int i = 0; i < numbers.length; i++) numbers[i] = i+1; |
Второй массив предназначен для хранения сгенерированных чисел:
1 |
int[] result = new int[k]; |
Теперь сгенерируем k чисел. Метод Math.random() возвращает случайное число с плавающей точкой, лежащее в интервале от 0(включительно) до 1(это значение не принадлежит интервалу). Умножая результат на число n, получим случайное число, лежащее между 0 и n-1.
1 |
int r = (int) (Math.random() * n); |
Присвоим i-е число i-му элементу массива. Сначала там будет помещено само число n, однако, как будет показано ниже, содержимое массива number будет изменяться после генерации каждого нового числа:
1 |
result[i] = numbers[r]; |
Теперь вы должны убедиться, что ни одно число не повторится — все номера должны быть разными. Следовательно, нужно поместить в элемент number[r] последнее число, содержащееся в массиве, и уменьшить n на единицу.
1 2 |
numbers[r] = numbers[n - 1]; n-- |
Обратите внимание на то, что при каждой генерации мы получаем индекс, а не само число. Этот индекс относится к массиву, содержащему числа, которые еще не были выбраны.
После генерации k номеров полученный массив сортируется, чтобы результат выглядел более элегантно:
1 2 3 |
Arrays.sort(result); for(int i = 0; i < result.length; i++) System.out.println(result[i]); |
import java.util.Arrays;
import java.util.Scanner;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
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); } } |