Изучаем Java

Вы здесь: Главная >> Java-учебник >> Командная строка и сортировка массива в java

Обучающие курсы:

Курс обучения профессии "Программист Java"
Nota Bene!!! Обучаем на веб-разработчика!!! Спешите!!!

Командная строка и сортировка массива в java


Параметры командной строки

Мы уже рассматривали пример программы для работы с массивами на языке Java, которая повторялась несколько раз. В каждой программе на языке Java есть метод main с параметром String [ ] args. Этот параметр означает, что метод main получает массив строк, а именно: аргументы, указанные в командной строке.

Например, рассмотрим следующую программу.

public class Message
{
public static void main(String[] args)
{
if (args[0].equals("-h");
System.out.print ("Здравствуй,");
else if (args[0].equals("-g"))
System.out.print("Прощай,");
// Печатает другие аргументы командной строки,
for (int i = 1; i < args.length; i++)
System.out.print(" " + args[i]);
System.out.print("!");
}
}

При следующем вызове программы

javaMessage -g жестокий мир

массив args будет состоять из таких элементов.
args[0] : "-g"
args[l] : "жестокий"
args[2]: "мир"

Программа выведет на печать сообщение

Прощай, жестокий мир!

В методе main программы на языке Java ее имя не хранится в массиве args. Например, после запуска программы Message с помощью команды

java Message -h мир

из командной строки элемент args[0] будет равен "-h" , а не "Message" или "java".

 

Сортировка массива

Если нужно упорядочить массив чисел, можно применить метод sort из класса Arrays.

int[] a = new int [10000] ;

Arrays.sort(a);

Этот метод использует усовершенствованную версию алгоритма быстрой сортировки, которая считается наиболее эффективной для большинства множеств. Класс Arrays имеет несколько удобных методов, предназначенных для работы с массивами. Эти методы перечислены в замечании об интерфейсе API, приведенном в конце этого раздела.
Программа из листинга 3.7 создает рабочий массив. Она генерирует случайную комбинацию чисел для лотереи. Например, если нужно выиграть "6 из 49", программа может напечатать следующее сообщение.

Поставьте на следующую комбинацию. Она сделает вас богатым!
4
7
8
19
30
44

Чтобы выбрать случайные числа, массив 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];

Теперь сгенерируем к чисел. Метод Math.random возвращает случайное число с
плавающей точкой, лежащее в интервале от 0 (включительно) до 1 (не включая). Умножая результат на число п, получаем случайное число, лежащее между 0 и n-1.

int r = (int)(Math.random() * n);

Присвоим i-e число i-му элементу массива. Сначала там будет помещено само число r однако, как будет показано ниже, содержимое массива        number будет изменяться
после каждой новой генерации случайной комбинации чисел.

result [ i ] = numbers[r];

Теперь мы должны убедиться, что ни одно число не повторится — все лотерейные номера должны быть разными. Следовательно, нужно поместить в ячейку number [ г ] последнее число, содержащееся в массиве, и уменьшить n на единицу.

numbers[r] = numbers[n - 1] ;
n- -;

Обратите внимание на то, что при каждой генерации мы получаем индекс, а не само число. Этот индекс относится к массиву, содержащему числа, которые еще не были выбраны.

После генерации к лотерейных номеров полученный массив сортируется, чтобы результат выглядел более элегантно.
Arrays.sort(result);
for (int i = 0; i < result.length; i++)
System.out.printIn(result[i]) ;

Листинг 3.7.
Программа LotteryDrawing.java

1. import java.util.*;
2. import javax.swing.*;
3.
4. public class LotteryDrawing
5. {
6. public static void main(String[] args)
7. {
8. String input = JOptionPane.showInputDialog
9. ("СКОЛЬКО номеров нужно угадать?");
10. int к = Integer.parselnt(input);
11.
12. input = JOptionPane.showInputDialog
13. ("Чему равен наибольший из возможных номеров?");
14. int n = Integer.parselnt(input);
15.
16. // Заполняем массив числами 1 2 3. . .n.
17. int[] numbers = new int[n];
18. for (int i = 0; i < numbers.length; i++)
19. numbers[i] = i + 1;
20.
21. // Генерируем к чисел и помещаем их во второй массив.
22. int[] result = new int[к];
23. for (int i = 0; i < result.length; i++)
24. (
25. // Генерируем случайный индекс от 0 до n - 1.
26. int r = (int)(Math.random() * n);
27.
28. // Помещаем элемент в случайную ячейку.
29. result[i] = numbers[r];
30.
31. // Перемещаем последний элемент в случайную ячейку.
32. numbers[r] = numbers[п - 1];
33. n— ;
34. }
35.
36. // Выводим на печать упорядоченный массив.
37.
38. Arrays.sort(result);
39. System.out.println
40. ("Поставьте на следующую комбинацию — не пожалеете!")
41. for (int i = 0; i < result.length; i++)
42. System.out.println(result[i]);
43.
44. System.exit(0);
45. }
46. }

API:
java.lang.System 1.1
static void arraycopy(Object from, int fromlndex, Object to, int to Index, int count)

Параметры: 
-from               Массив любого типа.
- fromlndex     Индекс, от которого начинается копирование элементов.
- to                   Массив, имеющий тот же тип, что и массив from.
- toIndex          Индекс, в который начинается копирование элементов.
- count             Количество копируемых элементов.

 
Метод копирует элементы из первого массива во второй.

API:
java.util.Arrays 1.2
- static void sort (Xxx[] a)
Параметры:  
a           Массив типа int, long, short, char, byte, boolean, float или double.

 

Метод упорядочивает массив с помощью алгоритма быстрой сортировки.
- static int binarySearch(Ххх[ a, Ххх v)
Параметры:  
a          Упорядоченный массив типа int, long, short, char, byte, boolean, float или double.
v          Значение того же типа, что и элементы массива а.

 
Метод использует алгоритм бинарного поиска величины v. Если эта величина найдена, возвращается ее индекс. В противном случае возвращается отрицательное значение r; значение v должно быть вставлено в ячейку -r-1 массива а.

- static void fill(Xxx[] a, Xxx v)
Параметры:
а          Массив типа int, long, short, char, byte, boolean, float или double.
v          Значение того же типа, что и элементы массива а.
Задает все элементы массива у.

- static boolean equals(Xxx[] a, Object other)
Параметры:
а             Массив типа int, long, short, char, byte, boolean, float или double.
other      Объект.
Возвращает величину true, если массив other имеет те же тип и длину, и
индексы соответствующих элементов совпадают.


Партнеры сайта