Глава 06
Вверх
Пример 6.7 Сортировка слов в файле
Задача.
Данный пример иллюстрирует применение на практике изученных алгоритмов.
Решение.
Мы попробуем смоделировать проблему, которую можно было бы решить используя рассмотренные методы. Остановимся на следующем сценарии. Из файла поочередно считываются слова и формируется массив, содержащий слова только в единственном экземпляре, после чего элементы массива сортируются и выводятся.
Алгоритм.
На рис 6.15 представлена та часть программы, которая отвечает за создание массива уникальных слов. После этого массив выводится, сортируется и выводится еще раз.
Программа.
С помощью метода selectionSort осуществляется сортировка строк. Как отмечалось в разделе 3.6 оператор < нельзя применять для сравнения объектов ( в частности наших объектов String). Поэтому мы воспользуемся методом compareTo или compareToIgnoreCase. Тот же метод будет использован в процессе поиска. Далее следует текст программы.
class SortWords
{
/* The Sort Words program by J M Bishop Feb 1997
void
selectionSort
(String[] a, int n)
{
for (int leftmost = 0; leftmost < n-1; leftmost++)
{
boolean
search
(String[] a, int n, String x)
{
void
report
(String[] a, int n)
{
SortWords() throws IOException
{
String group [] = new String[100];
int count=0;
System.out.print("Original\n");
selectionSort(group, count);
System.out.print("\n\nSorted\n");
public static void main(String[] args) throws IOException
{
Тестирование. Разработана программа, которая для открытия файла использует класс Filer, благодаря чему возможна работа с любыми данными. Применяется метод сортировки selectionSort. Чтобы упростить процедуру считывания и максимально увеличить количество слов, которые могут повторяться, мы реорганизовали файл и ввели пробелы между всеми словами и символами.
Файл sort.java, который следует обработать:
Полученный результат довольно интересен:
Вывод программы позволяет получить представление об используемых Java принципах сортировки операторов, букв и цифр. Дальнейшее развитие данная тема получит в примере 5.4.
Анализ программы:
Объявим массив, в который будем складывать слова, считанные из файла:
Затем откроем файл при помощи метода open класса Filer, которому передадим в параметр
имя файла.
Затем в цикле while будем пословно считывать из fin, и складывать в массив group считанные слова при помощи функции search. Функция search не только складывает переданное ей слово в массив group, но и проверяет, не содержится ли оно уже массиве. Если не содержится, то складывает его в массив, если уже содержится, то условие if не выполняется и программа переходит к считыванию следующего слова. По достижении
конца файла, выводится сообщение о том, сколько слов считано из файла в массив group. При этом, повторяю слова в массиве group будут уникальны.
int count=0;
Далее происходит вывод на экран слов из массива group при помощи функци report().
В параметр этой функции передается массив и число элементов, которые необходимо считать:
Затем функция сортировки:
И снова вывод:
Теперь рассмотрим подробнее функции, которые использованы в этой программе:
В функции selectionSort использован алгоритм сортировки методом отбора, который был рассмотрен нами ранее в этой главе. При этом в качестве параметров функции передается массив и число элементов массива:
void
selectionSort
(String[] a, int n)
{
for (int leftmost = 0; leftmost < n-1; leftmost++)
{
Функции search() передается массив, число элементов массива, и слово, которое необходимо проверить. Если оно в массиве не встретилось, то возвращается true, если встретилось, то false.
boolean
search
(String[] a, int n, String x)
{
Функция report() выводит на экран переданный ей массив слов.
При этом обратите внимание как интересно в функции report() при выводе сделана табуляция:
void
report
(String[] a, int n)
{
Назад |
Начало урока |
Вверх |
Вперед
import java.io.*;
import javagently.*;
import myutilities.*;
* ====================== Java 1.1 October 1997
* updated June 2000
* Reads in and then sorts up to 100
* different words.
* Illustrates sorting and searching an array.
*/
int chosen;
for (int j = leftmost+1; j < n; j++)
a[chosen] = a[leftmost];
a[leftmost] = temp;
if (x.compareTo(a[i])==0) return true;
return false;
if (i>0 && i % 7 == 0) System.out.println();
System.out.print("Where are the words? ");
Stream fin = Filer.open("sort.java");
try
{
if (! search(group,count,word))
{
count ++;
System.out.print("========\n");
report(group,count);
System.out.print("======\n");
report(group,count);
SortWords() throws IOException
{
String group [] = new String[100];
System.out.print("Where are the words? ");
Stream fin = Filer.open("sort.java");
try
{
if (! search(group,count,word))
{
count ++;
System.out.print("Original\n");
System.out.print("========\n");
report(group,count);
selectionSort(group, count);
System.out.print("\n\nSorted\n");
System.out.print("======\n");
report(group,count);
int chosen;
for (int j = leftmost+1; j < n; j++)
a[chosen] = a[leftmost];
a[leftmost] = temp;
if (x.compareTo(a[i])==0) return true;
return false;
if (i>0 && i % 7 == 0) System.out.println();
Содержание